home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / INTER53B.ZIP / INTERRUP.I < prev    next >
Text File  |  1997-01-12  |  342KB  |  9,178 lines

  1. Interrupt List, part 9 of 16
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997 Ralf Brown
  3. --------D-22---------------------------------
  4. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  5. Desc:    this vector specifies the address of the routine which is to be given
  6.       control after a program is terminated; it should never be called
  7.       directly, since it does not point at an interrupt handler
  8. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  9.       termination, and then a FAR JMP is performed to the address in INT 22
  10.     normally points at the instruction immediately following INT 21/AH=4Bh
  11.       call which loaded the current program
  12. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  13. --------G-22---------------------------------
  14. INT 22 - COMTROL HOSTESS i/ISA DEBUGGER - CHANGE FIRMWARE DEBUGGING PORT
  15.     AL = new firmware debugging port
  16. Return: ???
  17. SeeAlso: INT 21"COMTROL",INT 23"COMTROL"
  18. --------D-23---------------------------------
  19. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  20. ---DOS 1.x---
  21. Return: AH = 00h abort program
  22.     if all registers preserved, restart DOS call
  23. ---DOS 2+---
  24.     CF clear
  25. Return: all registers preserved
  26.     return via RETF with CF set or (MS-DOS 1,DR DOS) RETF 2 with CF set
  27.         DOS will abort program with errorlevel 0
  28.     else (RETF/RETF 2 with CF clear or IRET with CF ignored)
  29.         interrupted DOS call is restarted
  30. Notes:    this interrupt is invoked whenever DOS detects a ^C or ^Break; it
  31.       should never be called directly
  32.     MS-DOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  33.     MS-DOS remembers the stack pointer before calling INT 23, and if it is
  34.       not the same on return, pops and discards the top word; this is what
  35.       permits a return with RETF as well as IRET or RETF 2
  36.     MS-DOS 2.1+ ignores the returned CF if SP is the same on return as it
  37.       was when DOS called INT 23, so RETF 2 will not terminate the program
  38.     Novell DOS 7 always pops a word if CF is set on return, so one should
  39.       not return with RETF 2 and CF set or IRET with the stored flags' CF
  40.       set
  41.     any DOS call may safely be made within the INT 23 handler, although
  42.       the handler must check for a recursive invocation if it does
  43.       call DOS
  44. SeeAlso: INT 1B
  45. --------G-23---------------------------------
  46. INT 23 - COMTROL HOSTESS i/ISA DEBUGGER - GET CONFIGURATION INFORMATION
  47.     AL = query type
  48.         00h get old config map
  49.         Return: AX = old config map
  50.         01h get dual-ported RAM map
  51.         Return: BX:AX = dual-ported RAM map
  52.         02h get SCC port map
  53.         Return: BX:AX = SCC port map
  54. SeeAlso: INT 22"COMTROL",INT 26"COMTROL"
  55. --------D-24---------------------------------
  56. INT 24 C - DOS 1+ - CRITICAL ERROR HANDLER
  57. Notes:    invoked when a critical (usually hardware) error is encountered by DOS
  58.       (see #1879); should never be called directly
  59.     when DOS terminates a program, it copies the previous value of the
  60.       INT 24 vector out of the PSP (see #0725) and into the interrupt
  61.       vector table
  62. SeeAlso: INT 21/AH=95h
  63.  
  64. (Table 1879)
  65. Values critical error handler is called with:
  66.     AH = type and processing flags (see #1880)
  67.     AL = drive number if AH bit 7 clear
  68.     BP:SI -> device driver header (see #0987 at INT 21/AH=52h)
  69.         (BP:[SI+4] bit 15 set if character device)
  70.     DI low byte contains error code if AH bit 7 set (see #1881)
  71.     STACK:    DWORD    return address for INT 24 call
  72.         WORD    flags pushed by INT 24
  73.         WORD    original AX on entry to INT 21
  74.         WORD    BX
  75.         WORD    CX
  76.         WORD    DX
  77.         WORD    SI
  78.         WORD    DI
  79.         WORD    BP
  80.         WORD    DS
  81.         WORD    ES
  82.         DWORD    return address for INT 21 call
  83.         WORD    flags pushed by INT 21
  84. Return: AL = action code (see #1882)
  85.     SS,SP,DS,ES,BX,CX,DX preserved
  86. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  87.     if the handler returns to the application by popping the stack, DOS
  88.       will be in an unstable state until the first call with AH > 0Ch
  89.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  90.       critical errors
  91.     if IGNORE specified but not allowed, it is turned into FAIL
  92.     if RETRY specified but not allowed, it is turned into FAIL
  93.     if FAIL specified but not allowed, it is turned into ABORT
  94.     (DOS 3.0+) if a critical error occurs inside the critical error
  95.       handler, the DOS call is automatically failed (AL set to 03h and
  96.       the INT 24 call skipped)
  97.  
  98. Bitfields for critical error type and processing flags:
  99. Bit(s)    Description    (Table 1880)
  100.  7    clear = disk I/O error
  101.     set   = -- if block device, bad FAT image in memory
  102.         -- if char device, error code in DI
  103.  6    unused
  104.  5    Ignore allowed (DOS 3.0+)
  105.  4    Retry allowed (DOS 3.0+)
  106.  3    Fail allowed (DOS 3.0+)
  107.  2-1    disk area of error
  108.     00 = DOS area    01 = FAT
  109.     10 = root dir    11 = data area
  110.  0    set if write, clear if read
  111.  
  112. (Table 1881)
  113. Values for critical error code:
  114.  00h    write-protection violation attempted
  115.  01h    unknown unit for driver
  116.  02h    drive not ready
  117.  03h    unknown command given to driver
  118.  04h    data error (bad CRC)
  119.  05h    bad device driver request structure length
  120.  06h    seek error
  121.  07h    unknown media type
  122.  08h    sector not found
  123.  09h    printer out of paper
  124.  0Ah    write fault
  125.  0Bh    read fault
  126.  0Ch    general failure
  127.  0Dh    (DOS 3.0+) sharing violation
  128.  0Eh    (DOS 3.0+) lock violation
  129.  0Fh    invalid disk change
  130.  10h    (DOS 3.0+) FCB unavailable
  131.  11h    (DOS 3.0+) sharing buffer overflow
  132.  12h    (DOS 4.0+) code page mismatch
  133.  13h    (DOS 4.0+) out of input
  134.  14h    (DOS 4.0+) insufficient disk space
  135.  
  136. (Table 1882)
  137. Values for critical error handler action code:
  138.  00h    ignore error and continue processing request
  139.  01h    retry operation
  140.  02h    terminate program as though INT 21/AH=4Ch called (INT 20h for DOS 1.x)
  141.  03h    fail system call in progress (DOS 3+)
  142. --------D-25---------------------------------
  143. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  144.     AL = drive number (00h = A:, 01h = B:, etc)
  145.     CX = number of sectors to read (not FFFFh)
  146.     DX = starting logical sector number (0000h - highest sector on drive)
  147.     DS:BX -> buffer for data
  148. Return: CF clear if successful
  149.     CF set on error
  150.         AH = status (see #1883)
  151.         AL = error code (same as passed to INT 24 in DI)
  152.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  153.     may destroy all other registers except segment registers
  154. Notes:    original flags are left on stack, and must be popped by caller
  155.     this call bypasses the DOS filesystem
  156.     examination of CPWIN386.CPL indicates that if this call fails with
  157.       error 0408h on an old-style (<32M) call, one should retry the
  158.       call with the high bit of the drive number in AL set
  159.     Novell DOS 7 decides whether the old-style or new-style (>32M) version
  160.       of INT 25 must be used solely on the basis of the partition's size,
  161.       thus forcing use of the new-style call even for data in the first
  162.       32M of the partition
  163. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  164.       invalid drive number
  165.     DR DOS 3.41 will return with a jump instead of RETF, leaving the
  166.       wrong number of bytes on the stack; use the huge-partition version
  167.       (INT 25/CX=FFFFh) for all partition sizes under DR DOS 3.41
  168. SeeAlso: INT 13/AH=02h,INT 25/CX=FFFFh,INT 26,INT 21/AX=7305h
  169.  
  170. (Table 1883)
  171. Values for disk I/O status:
  172.  80h    device failed to respond (timeout)
  173.  40h    seek operation failed
  174.  20h    controller failed
  175.  10h    data error (bad CRC)
  176.  08h    DMA failure
  177.  04h    requested sector not found
  178.  03h    write-protected disk (INT 26 only)
  179.  02h    bad address mark
  180.  01h    bad command
  181. --------D-25----CXFFFF-----------------------
  182. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (32M-2047M hard-disk partition)
  183.     CX = FFFFh
  184.     AL = drive number (0=A, 1=B, etc)
  185.     DS:BX -> disk read packet (see #1884)
  186. Return: CF clear if successful
  187.     CF set on error
  188.         AH = status (see #1883)
  189.         AL = error code (same as passed to INT 24 in DI)
  190.     may destroy all other registers except segment registers
  191. Notes:    partition is potentially >32M (and requires this form of the call) if
  192.       bit 1 of the device attribute word in the device driver is set
  193.     original flags are left on stack, and must be removed by caller
  194.     this call bypasses the DOS filesystem
  195.     for FAT32 drives (which may be up to 2TB in size), use INT 21/AX=7305h
  196. SeeAlso: INT 13/AH=02h,INT 25,INT 26/CX=FFFFh,INT 21/AX=7305h
  197.  
  198. Format of disk read packet:
  199. Offset    Size    Description    (Table 1884)
  200.  00h    DWORD    sector number
  201.  04h    WORD    number of sectors to read
  202.  06h    DWORD    transfer address
  203. SeeAlso: #1888
  204. --------k-25CDCD-----------------------------
  205. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  206.     AX = CDCDh
  207.     DS:BX -> buffer for address (see #1885)
  208.     CX = 0001h
  209.     DX = 0000h
  210. Return: AX = CDCDh if Stacker installed
  211.         DS:BX buffer filled
  212. Note:    not supported by Stacker Anywhere; to obtain the Stacker device
  213.       driver address and to detect drives controlled by all versions
  214.       of Stacker, INT 21/AX=4404h"Stacker" or lookup via the CDS and DPB
  215.       should be preferred (see INT 21/AH=52h)
  216.     Stacker Anywhere does not link its built-in device driver into
  217.       the standard device driver chain, but it can be found via CDS/DPB
  218. SeeAlso: INT 21/AX=4404h"Stacker"
  219.  
  220. Format of Stacker v2+ driver address buffer:
  221. Offset    Size    Description    (Table 1885)
  222.  00h    WORD    signature CDCDh
  223.  02h    WORD    ??? 0001h
  224.  04h    DWORD    pointer to Stacker signature at device driver offset 1Ah
  225.           (see #1886)
  226.  
  227. Format of Stacker v2+ device driver:
  228. Offset    Size    Description    (Table 1886)
  229.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  230.         FFFFh:FFFFh for Stacker Anywhere
  231.  04h    WORD    device attributes (see #0988,#0989)
  232.  06h    WORD    device strategy entry point
  233.  08h    WORD    device interrupt entry point
  234.  0Ah    BYTE    number of subunits (drives) supported by driver
  235.         0 for Stacker Anywhere
  236.  0Bh  7 BYTEs    signature "STAC-CD" for Stacker and Stacker Anywhere
  237.  12h  7 BYTEs    ???
  238.  19h    BYTE    always = 01h ?? (Stacker Anywhere points here)
  239.  1Ah    WORD    signature A55Ah (all other Stacker versions point here)
  240.  1Ch    WORD    Stacker version * 64h
  241.         0C8h = 200, 012Ch = 300, 0190h = 400 (also Stacker Anywhere)
  242.  1Eh    WORD    offset of volume-specific information offset table
  243.         (list of WORDs, one per drive, containing offsets to various
  244.           information)
  245.  20h 56 BYTEs    n/a
  246.  58h    BYTE    volume number, set after INT 21/AX=4404h, INT 21/AX=4408h
  247.         (use to index into volume-specific info offset table,
  248.         should be set to FFh before and tested for change after)
  249.  59h 19 BYTEs    n/a
  250.  6Ch  4 BYTEs    ASCII string "SWAP"
  251.  70h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  252.         (only used for drives swapped by SSWAP.COM; other drives
  253.         compressed by Stacker can be found with the standard device
  254.         driver header signature (see INT 21/AH=52h)
  255. ---Stacker 4, Stacker Anywhere---
  256.  8Ah 40    BYTEs    ???
  257.  B2h  4 BYTEs    ASCII string "SWP2"
  258.  B6h 26 BYTEs    drive table ???
  259.  D0h 150 BYTEs    ???
  260. 166h 60 BYTEs    LZSINFO structure (see #2087 at INT 2F/AX=4A12h)
  261. SeeAlso: #1887,#0987 at INT 21/AH=52h
  262.  
  263. Format of Stacker boot record:
  264. Offset    Size    Description    (Table 1887)
  265. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  266. 1F8h    DWORD    pointer to start of Stacker device driver
  267. 1FCh    WORD    Stacker volume number
  268. 1FEh    WORD    ???
  269. SeeAlso: #1886
  270. --------c-25--FFSI4358-----------------------
  271. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  272.     AL = FFh
  273.     SI = 4358h
  274. Return: SI = 6378h if installed
  275.         CX = segment of device driver PC-CACHE.SYS
  276.         DX = version (major in DH, minor in DL)
  277. Program: PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  278.       access to certain disk drivers for devices such as Bernoulli drives
  279. SeeAlso: INT 13/AH=A0h
  280. --------D-26---------------------------------
  281. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  282.     AL = drive number (00h = A:, 01h = B:, etc)
  283.     CX = number of sectors to write (not FFFFh)
  284.     DX = starting logical sector number (0000h - highest sector on drive)
  285.     DS:BX -> data to write
  286. Return: CF clear if successful
  287.     CF set on error
  288.         AH = status (see #1883)
  289.         AL = error code (same as passed to INT 24 in DI)
  290.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  291.     may destroy all other registers except segment registers
  292. Notes:    original flags are left on stack, and must be popped by caller
  293.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  294.       disk buffers referencing sectors which are written with this call
  295.     examination of CPWIN386.CPL indicates that if this call fails with
  296.       error 0408h on an old-style (<32M) call, one should retry the
  297.       call with the high bit of the drive number in AL set
  298.     Novell DOS 7 decides whether the old-style or new-style (>32M) version
  299.       of INT 26 must be used solely on the basis of the partition's size,
  300.       thus forcing use of the new-style call even for data in the first
  301.       32M of the partition
  302. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  303.       invalid drive number
  304.     DR DOS 3.41 will return with a jump instead of RETF, leaving the
  305.       wrong number of bytes on the stack; use the huge-partition version
  306.       (INT 26/CX=FFFFh) for all partition sizes under DR DOS 3.41
  307. SeeAlso: INT 13/AH=03h,INT 25,INT 26/CX=FFFFh,INT 21/AX=7305h
  308. --------D-26----CXFFFF-----------------------
  309. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (32M-2047M hard-disk partition)
  310.     CX = FFFFh
  311.     AL = drive number (0=A, 1=B, etc)
  312.     DS:BX -> disk write packet (see #1888)
  313. Return: CF clear if successful
  314.     CF set on error
  315.         AH = status (see #1883)
  316.         AL = error code (same as passed to INT 24 in DI)
  317.     may destroy all other registers except segment registers
  318. Notes:    partition is potentially >32M (and requires this form of the call) if
  319.       bit 1 of the device attribute word in the device driver is set
  320.     original flags are left on stack, and must be removed by caller
  321.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  322.       disk buffers referencing sectors which are written with this call
  323.     for FAT32 drives (which may be up to 2TB in size), use INT 21/AX=7305h
  324. SeeAlso: INT 13/AH=03h,INT 25/CX=FFFFh,INT 26,INT 21/AX=7305h
  325.  
  326. Format of disk write packet:
  327. Offset    Size    Description    (Table 1888)
  328.  00h    DWORD    sector number
  329.  04h    WORD    number of sectors to read
  330.  06h    DWORD    transfer address
  331. SeeAlso: #1884
  332. --------G-26---------------------------------
  333. INT 26 - COMTROL HOSTESS i/ISA DEBUGGER - ENTER/EXIT EXTENDED ADDRESSING MODE
  334.     ???
  335. Return: ???
  336. SeeAlso: INT 23"COMTROL",INT 27"COMTROL"
  337. --------D-27---------------------------------
  338. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  339.     DX = number of bytes to keep resident (max FFF0h)
  340.     CS = segment of PSP
  341. Return: never
  342. Notes:    this is an obsolete call
  343.     INT 22, INT 23, and INT 24 are restored from the PSP
  344.     does not close any open files
  345.     the minimum number of bytes which will remain resident is 110h for
  346.       DOS 2.x and 60h for DOS 3.0+; there is no minimum for DOS 1.x, which
  347.       implements this service in COMMAND.COM rather than the DOS kernel
  348. SeeAlso: INT 21/AH=31h
  349. --------G-27---------------------------------
  350. INT 27 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE REMOTE TURBO DEBUGGER KERNEL
  351.     ???
  352. Return: ???
  353. Desc:    invoke a copy of the remote Turbo Debugger kernel on the Hostess i
  354.       controller
  355. SeeAlso: INT 20"COMTROL",INT 26"COMTROL"
  356. --------D-28---------------------------------
  357. INT 28 C - DOS 2+ - DOS IDLE INTERRUPT
  358.     SS:SP = top of MS-DOS stack for I/O functions
  359. Return: all registers preserved
  360. Desc:    This interrupt is invoked each time one of the DOS character input
  361.       functions loops while waiting for input.  Since a DOS call is in
  362.       progress even though DOS is actually idle during such input waits,
  363.       hooking this function is necessary to allow a TSR to perform DOS
  364.       calls while the foreground program is waiting for user input.     The
  365.       INT 28h handler may invoke any INT 21h function except functions
  366.       00h through 0Ch.
  367. Notes:    under DOS 2.x, the critical error flag (the byte immediately after the
  368.       InDOS flag) must be set in order to call DOS functions 50h/51h from
  369.       the INT 28h handler without destroying the DOS stacks.
  370.     calls to INT 21/AH=3Fh,40h from within an INT 28 handler may not use a
  371.       handle which refers to CON
  372.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  373.       set to 01h; if larger, DOS is truly busy and should not be reentered
  374.     the default handler is an IRET instruction
  375.     supported in OS/2 compatibility box
  376.     the _MS-DOS_Programmer's_Reference_ for DOS 5.0 incorrectly documents
  377.       this interrupt as superseded
  378. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h,INT 2F/AX=1680h
  379. --------D-29---------------------------------
  380. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  381.     AL = character to display
  382. Return: nothing
  383.     BX may be destroyed by some versions of DOS 3.3
  384. Notes:    automatically called when writing to a device with bit 4 of its device
  385.       driver header set (see also INT 21/AH=52h)
  386.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  387.       vector and assume that ANSI.SYS is installed if the segment is larger
  388.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  389.     the default handler under DESQview 2.2 understands the <Esc>[2J
  390.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  391. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79"AVATAR.SYS"
  392. --------U-29E60DCL0E-------------------------
  393. INT 29 - ShowGFX - INSTALLATION CHECK
  394.     AX = E60Dh
  395.     CL = 0Eh
  396.     DX = C0DEh
  397. Return: DX = DEC0h
  398. Program: ShowGFX is a PCBoard graphics driver by Solar Designer
  399. --------N-2A00-------------------------------
  400. INT 2A - NETWORK - INSTALLATION CHECK
  401.     AH = 00h
  402. Return: AH <> 00h if installed
  403.     CF set if NetWare v2.15 NetBIOS emulator installed
  404. Note:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  405.       etc.
  406. SeeAlso: INT 5C"NetBIOS"
  407. --------N-2A0000-----------------------------
  408. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  409.     AX = 0000h
  410. Return: AH = DDh
  411. SeeAlso: INT 5B"Extended NetBIOS"
  412. --------N-2A01-------------------------------
  413. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  414.     AH = 01h
  415.     ES:BX -> NCB (see #2500 at INT 5C"NetBIOS")
  416. Return: AL = NetBIOS error code
  417.     AH = status
  418.         00h no error
  419.         01h error occurred
  420. SeeAlso: AH=04h,AX=0500h,INT 5B"Extended NetBIOS",INT 5C"NetBIOS"
  421. --------N-2A02-------------------------------
  422. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  423.     AH = 02h
  424.     ???
  425. Return: ???
  426. --------N-2A0300-----------------------------
  427. INT 2A - NETWORK - CHECK DIRECT I/O
  428.     AX = 0300h
  429.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  430.           must include the colon)
  431. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  432.     CF set if access via files only
  433. Notes:    do not use direct disk accesses if this function returns CF set or the
  434.       device is redirected (INT 21/AX=5F02h)
  435.     use AH=00h to determine whether the network is installed; if not,
  436.       direct physical access is allowed
  437.     may take some time to execute, so programs which need to check
  438.       frequently should save the result of the first call
  439.     this function is called by the DOS kernel on INT 25 and INT 26
  440.     supported by PC LAN Program, LAN Manage, LANtastic, NetWare, 10NET,
  441.       etc.
  442. SeeAlso: INT 13/AH=02h,INT 13/AH=03h,INT 25,INT 26,INT 21/AX=5F02h
  443. --------N-2A04-------------------------------
  444. INT 2A - NETWORK - EXECUTE NetBIOS REQUEST
  445.     AH = 04h
  446.     AL = error retry
  447.         00h automatically retry request on errors 09h, 12h, and 21h
  448.           (see #2499 at INT 5C"NetBIOS")
  449.         01h no retry
  450.         02h ???
  451.     ES:BX -> Network Control Block (see #2500 at INT 5C"NetBIOS")
  452. Return: AX = 0000h if successful
  453.     AH = 01h on error
  454.         AL = error code
  455. Notes:    invokes either INT 5B or INT 5C as appropriate
  456.     supported by PC LAN Program, LANtastic, LAN Manager, NetWare, 10NET,
  457.       etc.
  458.     NetWare 2.15 NetBIOS emulator returns CF clear if successful, CF set
  459.       on error
  460.     PC LAN Program defines any non-zero return value in AH as an error
  461.       indicator for subfunction 00h, and any non-zero return value in AX
  462.       as an error indicator for subfunction 01h
  463. SeeAlso: AH=00h,AH=01h,AX=0500h,INT 5B"Extended NetBIOS",INT 5C"NetBIOS"
  464. --------N-2A0500-----------------------------
  465. INT 2A - NETWORK - GET NETWORK RESOURCE AVAILABILITY
  466.     AX = 0500h
  467. Return: AX reserved
  468.     BX = number of network names available
  469.     CX = number of network control blocks available
  470.     DX = number of network sessions available
  471. Notes:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  472.       etc.
  473.     the application should call this function before using any network
  474.       resources, and maintain its own count to avoid exceeding the
  475.       network's resource limits
  476. SeeAlso: AH=00h,AH=01h,AH=04h,INT 5C"NetBIOS"
  477. --------N-2A06-------------------------------
  478. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  479.     AH = 06h
  480.     AL = function
  481.         01h set concatenation mode
  482.         all printer output put in one job until return to DOS prompt
  483.         02h set truncation mode (default)
  484.         printer open/close or BIOS/DOS output switch starts new job
  485.         03h flush printer output and start new print job
  486. Return: CF set on error
  487.         AX = error code
  488.     CF clear if successful
  489. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  490.     supported by PC LAN Program, LANtastic, NetWare, 10NET, etc.
  491.     LANtastic v4.x no longer supports this call
  492.     this function sets the printer mode for all redirected printers
  493. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  494. --------N-2A07-------------------------------
  495. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  496.     AH = 07h
  497.     ???
  498. Return: ???
  499. Program: PC Network is an early networking package which was renamed the
  500.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  501. SeeAlso: AH=86h
  502. --------N-2A2001-----------------------------
  503. INT 2A - MS Networks or NETBIOS - ???
  504.     AX = 2001h
  505.     ???
  506. Return: ???
  507. Note:    intercepted by DESQview 2.x
  508. --------N-2A2002-----------------------------
  509. INT 2A - NETWORK - ???
  510.     AX = 2002h
  511.     ???
  512. Return: ???
  513. Note:    called by MS-DOS 3.30-6.00 APPEND
  514. --------N-2A2003-----------------------------
  515. INT 2A - NETWORK - ???
  516.     AX = 2003h
  517.     ???
  518. Return: ???
  519. Note:    called by MS-DOS 3.30-6.00 APPEND
  520. --------N-2A4147DX0000-----------------------
  521. INT 2A U - NetSoft DOS-NET v1.20+ - INSTALLATION CHECK
  522.     AX = 4147h ('AG')
  523.     DX = 0000h
  524. Return: DX = 4147h if installed
  525.         DS:SI -> configuration data (see #1889)
  526. Program: DOS-NET is a shareware networking package by Albert Graham
  527. Note:    this call is supported by CLIENT.COM, SERVER.COM, ROUTER.COM, and
  528.       NETDOS.COM
  529. SeeAlso: INT 65/DX=4147h,INT 65/DX=4741h
  530.  
  531. Format of DOS-NET v1.20 configuration data area:
  532. Offset    Size    Description    (Table 1889)
  533.  00h    BYTE    ???
  534.  01h    BYTE    interrupt number used by DOS-NET APIs
  535.  02h    WORD    function number to place in AX for above interrupt
  536.  04h    BYTE    minor version as two BCD digits (e.g. 20h for v1.20)
  537.  05h    BYTE    major version number (01h for v1.20)
  538.  06h  2 BYTEs    ???
  539.  08h    WORD    ??? (used by ARCNET.COM)
  540.         bit 15: ??? (set by MACTEST.COM)
  541.  0Ah    WORD    ??? (used by NDIS.COM and ODI.COM)
  542.  0Ch 22 BYTEs    ???
  543.  24h    DWORD    -> ??? function (set by PROTECT.COM)
  544.  28h 12 BYTEs    ???
  545.  34h    DWORD    -> ??? function (set by FASTVIEW.COM)
  546.  38h    DWORD    -> ??? function (set by FASTVIEW.COM)
  547.  58h    DWORD    -> ??? (offsets 04h and 1Ah from value are used by NETFILES)
  548.     ???
  549.  7Ch    WORD    ???
  550.  7Eh    WORD    ??? (may be high half of a DWORD at 7Ch)
  551.     ???
  552.  A8h    DWORD    -> ??? (used by SM.COM)
  553.     ???
  554. 114h    WORD    ???
  555. 116h    WORD    ??? (may be high half of a DWORD at 114h)
  556.     ???
  557. 1BDh    BYTE    ??? flags
  558.         bit 0: ???
  559.         bit 6: ???
  560.     ???
  561. 1E1h    BYTE    ???
  562.     ???
  563. 208h    WORD    ??? (used by SM.COM, MACTEST)
  564. 282h    WORD    ???
  565. 284h  2 BYTEs    ???
  566. 286h    WORD    ??? flags
  567.         bit 0: ???
  568.     ???
  569. 31Eh    WORD    ???
  570. 320h    WORD    ??? (used by NDIS.COM and ODI.COM)
  571. 322h  8 BYTEs    ???
  572. 32Ah    WORD    ??? (used by NDIS.COM and ODI.COM)
  573.     ???
  574. 33Eh  4 BYTEs    ??? (used by ODI.COM)
  575. 342h  N BYTEs    ??? (used by NDIS.COM)
  576.     ???
  577. 3CFh    BYTE    ??? flags
  578.         bit 2: ???
  579. 3D2h    BYTE    installed-component flags
  580.         bit 0: PROTECT installed
  581.         bit 1: NETCACHE installed
  582.         bit 3: SM.COM installed
  583.         bit 7: NETDEBUG installed
  584. 3D3h    BYTE    installed-component flags
  585.         bit 0: NETFILES installed
  586.         bit 6: FASTVIEW installed
  587.     ???
  588. 3FFh    BYTE    ??? (used by NDIS.COM)
  589. 400h    BYTE    ???
  590. 401h    BYTE    ??? (used by SM.COM)
  591. 402h    BYTE    ??? (used by SM.COM)
  592.     ???
  593. 448h    BYTE    ???
  594. 449h    BYTE    ??? (used by MACTEST)
  595. 44Ah    BYTE    ??? (used by PROTECT)
  596. 44Bh    BYTE    ???
  597. 44Ch    BYTE    ???
  598. 44Dh    BYTE    ??? (used by SM.COM)
  599. 44Eh    BYTE    ??? (used by SM.COM, MACTEST)
  600.     ???
  601. --------N-2A7802-----------------------------
  602. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  603.     AX = 7802h
  604.     ES:DI -> 8-byte buffer to be filled
  605. Return: AL = 00h if no user logged on to Extended Services
  606.     AL <> 00h if user logged on to Extended Services
  607.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  608. --------D-2A80-------------------------------
  609. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  610.     AH = 80h
  611.     AL = critical section number (00h-0Fh) (see #1890)
  612. Notes:    normally hooked to avoid interrupting a critical section, rather than
  613.       called
  614.     the handler should ensure that none of the critical sections are
  615.       reentered, usually by suspending a task which attempts to reenter
  616.       an active critical section
  617.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  618.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  619.       beginning at offset -11 from the Swappable Data Area
  620.       (see #1027 at INT 21/AX=5D06h); each word contains the offset within
  621.       the DOS data segment of a byte which must be changed from C3h (RET)
  622.       to 50h (POP AX) under DOS 3.x or from 00h to a nonzero value under
  623.       DOS 4.0+ to enable use of critical sections.    For DOS 4.0+, all
  624.       words in this list point at the byte at offset 0D0Ch.
  625.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  626.       far calls to its own handler, and does not reflect the calls back
  627.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  628.       ModifyDOSInt2A=0 in the [386Enh] section
  629.     Novell NETX does not issue INT 2A/AH=80h and INT 2A/AH=81h calls when
  630.       it intercepts INT 21 calls and processes them itself
  631. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  632.  
  633. (Table 1890)
  634. Values for DOS critical section number:
  635.  01h    DOS kernel, SHARE.EXE, DOSMGR
  636.     apparently for maintaining the integrity of DOS/SHARE/NET
  637.       data structures
  638.  02h    DOS kernel, DOSMGR
  639.     ensures that no multitasking occurs while DOS is calling an
  640.       installable device driver
  641.  05h    network redirector
  642.  06h    DOS 4.x only IFSFUNC
  643.  08h    ASSIGN.COM
  644.  0Ah    MSCDEX, CORELCDX
  645.  0Fh    IBM PC LAN server (while intercepting INT 10/AH=06h,07h,0Eh)
  646. --------D-2A81-------------------------------
  647. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  648.     AH = 81h
  649.     AL = critical section number (00h-0Fh) (see #1890)
  650. Notes:    normally hooked rather than called
  651.     the handler should reawaken any tasks which were suspended due to an
  652.       attempt to enter the specified critical section
  653.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  654.       far calls to its own handler, and does not reflect the calls back
  655.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  656.       ModifyDOSInt2A=0 in the [386Enh] section
  657. SeeAlso: AH=80h,AH=82h,AX=8700h
  658. --------D-2A82-------------------------------
  659. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  660.     AH = 82h
  661. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  662.       greater than 0Ch except 59h, and on process termination
  663.     the handler should reawaken any tasks which were suspended due to an
  664.       attempt to enter one of the critical sections 0 through 7
  665. SeeAlso: AH=81h
  666. --------N-2A84-------------------------------
  667. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  668.     AH = 84h
  669. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  670.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  671.       software to process requests
  672. SeeAlso: INT 28
  673. --------N-2A86-------------------------------
  674. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  675.     AH = 86h
  676.     ???
  677. Return: ???
  678. SeeAlso: AH=07h,AH=C4h
  679. --------P-2A8700-----------------------------
  680. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  681.     AX = 8700h
  682.     CF clear
  683. Return: CF clear if OK to print in background now
  684.     CF set if background printing not allowed at this time
  685. Desc:    used to inform interested programs that PRINT is about to start its
  686.       background processing, and allow those programs to postpone the
  687.       processing if necessary
  688. Notes:    when PRINT gains control and wants to begin printing, it calls this
  689.       function.  If CF is clear on return, PRINT begins its background
  690.       processing, and calls AX=8701h when it is done.  If CF is set on
  691.       return, PRINT will relinquish control immediately, and will not
  692.       call AX=8701h
  693.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  694.       prevent background printing while its own code is active
  695. SeeAlso: AH=80h,AH=81h,AX=8701h
  696. --------P-2A8701-----------------------------
  697. INT 2A CU - PRINT - END BACKGROUND PRINTING
  698.     AX = 8701h
  699. Desc:    used to inform interested programs that PRINT has completed its
  700.       background processing
  701. Note:    called by PRINT after it has performed some background printing; not
  702.       called if AX=8700h returned with CF set.
  703. SeeAlso: AX=8700h
  704. --------N-2A89-------------------------------
  705. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  706.     AH = 89h
  707.     AL = ???  (ASSIGN uses 08h)
  708.     ???
  709. Return: ???
  710. --------I-2A90-------------------------------
  711. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  712.     AH = 90h
  713.     ???
  714. Return: ???
  715. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  716.       03h-07h,0Ch-11h
  717. --------N-2AC2-------------------------------
  718. INT 2A U - Network - ???
  719.     AH = C2h
  720.     AL = subfunction
  721.         07h ???
  722.         08h ???
  723.     BX = 0001h
  724.     ???
  725. Return: ???
  726. Note:    this function is called by the DOS 3.30-6.00 APPEND
  727. --------N-2AC4-------------------------------
  728. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  729.     AH = C4h
  730.     AL = subfunction
  731.         07h ???
  732.         08h ???
  733.     BX = ???
  734.     ???
  735. Return: ???
  736. SeeAlso: AH=86h
  737. --------N-2AD800-----------------------------
  738. INT 2A U - Novell NetWare Lite - SERVER - SET ???
  739.     AX = D800h
  740. Return: nothing
  741. Desc:    sets ??? flag, and sets ??? to initial value
  742. Note:    called by CLIENT
  743. SeeAlso: AX=D801h,AX=D850h
  744. --------N-2AD801-----------------------------
  745. INT 2A U - Novell NetWare Lite - SERVER - RESET ???
  746.     AX = D801h
  747. Return: nothing
  748. Desc:    clears the ??? flag set by AX=D800h
  749. Note:    called by CLIENT
  750. SeeAlso: AX=D800h,AX=D850h
  751. --------N-2AD850-----------------------------
  752. INT 2A U - Novell NetWare Lite - CLIENT - INCREMENT ???
  753.     AX = D850h
  754. Return: nothing
  755. Desc:    increments an internal byte-sized counter
  756. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  757.       Advanced NetWare 4.0 DOS Requester
  758. SeeAlso: AX=D851h
  759. --------N-2AD851-----------------------------
  760. INT 2A U - Novell NetWare Lite - CLIENT - RESET ???
  761.     AX = D851h
  762. Return: nothing
  763. Desc:    resets an internal byte-sized counter to zero
  764. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  765.       Advanced NetWare 4.0 DOS Requester
  766. SeeAlso: AX=D850h
  767. --------N-2AD852-----------------------------
  768. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  769.     AX = D852h
  770. Return: ???
  771. Note:    calls the NetWare Lite SERVER installation check, and sets ??? pointer
  772. SeeAlso: AX=D853h,INT 2F/AX=D880h
  773. --------N-2AD853-----------------------------
  774. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  775.     AX = D853h
  776. Return: ???
  777. Note:    clears the pointer set by AX=D852h
  778. SeeAlso: AX=D852h
  779. --------N-2AE0-------------------------------
  780. INT 2A U - PC Network 1.00 - ???
  781.     AH = E0h
  782.     AL = subfunction??? (01h,02h, maybe others)
  783.     ???
  784. Return: ???
  785. Note:    called by PCNet 1.00 NET.COM, a shell program from which others are run
  786. --------N-2AFF90-----------------------------
  787. INT 2A - PC/TCP PREDIR.EXE - ???
  788.     AX = FF90h
  789. Return: AX = ???
  790. Note:    PREDIR.EXE is the network printer redirector included as part of the
  791.       PC/TCP system by FTP Software, Inc.
  792. --------N-2AFF91-----------------------------
  793. INT 2A - PC/TCP PREDIR.EXE - ???
  794.     AX = FF91h
  795.     BX = ???
  796. Return: AX = status???
  797. --------N-2AFF92-----------------------------
  798. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  799.     AX = FF92h
  800. Return: AX = 0000h if installed
  801.        BX = redirected printer port (FFFFh if no printers redirected)
  802.        CX = version (CH = major, CL = minor)
  803. Note:    PREDIR.EXE is the network printer redirector included as part of the
  804.       PC/TCP system by FTP Software, Inc.
  805. --------N-2AFF93-----------------------------
  806. INT 2A - PC/TCP PREDIR.EXE - ???
  807.     AX = FF93h
  808. Return: AX = ???
  809. --------N-2AFF94-----------------------------
  810. INT 2A - PC/TCP PREDIR.EXE - ???
  811.     AX = FF94h
  812.     BX = ???
  813.     CX = ???
  814.     DX = ???
  815. Return: AX = ???
  816. Note:    PREDIR.EXE is the network printer redirector included as part of the
  817.       PC/TCP system by FTP Software, Inc.
  818. --------N-2AFF95-----------------------------
  819. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  820.     AX = FF95h
  821.     CX = what to get
  822.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  823.         0001h spooling program
  824.         0002h ???
  825.         0003h spool file name
  826.         0004h swap file name
  827. Return: AX = status
  828.         0000h successful
  829.     BX:DX -> ASCIZ configuration string
  830. --------N-2AFF96-----------------------------
  831. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  832.     AX = FF96h
  833.     CX = what to set
  834.         0000h ???
  835.         0001h print-on-hotkey state
  836.         0002h print-on-exit state
  837.         0003h print job timeout in clock ticks
  838.         0004h print-on-EOF state
  839.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  840. Return: AX = ???
  841. SeeAlso: AX=FF97h
  842. Note:    PREDIR.EXE is the network printer redirector included as part of the
  843.       PC/TCP system by FTP Software, Inc.
  844. --------N-2AFF97-----------------------------
  845. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  846.     AX = FF97h
  847.     CX = what to get
  848.         0000h ???
  849.         0001h print-on-hotkey state
  850.         0002h print-on-exit state
  851.         0003h print job timeout in clock ticks
  852.         0004h print-on-EOF state
  853. Return: AX = status
  854.         0000h successful
  855.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  856. SeeAlso: AX=FF96h
  857. --------D-2B---------------------------------
  858. INT 2B - DOS 2+ - RESERVED
  859. Note:    this vector is not used in MS-DOS versions <= 6.22, and points at an
  860.       IRET instruction
  861. --------D-2B---------------------------------
  862. INT 2B - IBM ROM-DOS v4.0 - ???
  863.     AH = function
  864.         00h ??? (modifies data in IBMBIO.COM)
  865.         01h internal operations
  866.         02h ???
  867.         AL = index (00h-0Ch)
  868.         Return: AX = ??? or (CMOS 2Dh and CMOS 2Eh)
  869.         03h get ??? data
  870.         Return: AX = (CMOS 2Dh and CMOS 2Eh)
  871.             BX = FFFFh
  872.         other does nothing
  873. Note:    function 03h is called by ROMSHELL.COM; if BX != 0, then the ES:DI from
  874.       INT 2F/AX=1982h points at valid data
  875. SeeAlso: INT 2F/AX=1982h
  876. --------D-2C---------------------------------
  877. INT 2C - DOS 2+ - RESERVED
  878. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  879. --------O-2C---------------------------------
  880. INT 2C - STARLITE architecture - KERNEL API
  881. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  882.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  883.       be released in 1991.    The interrupt number is subject to change
  884.       before the actual release.
  885. --------m-2C---------------------------------
  886. INT 2C R - Cloaking - CALL PROTECTED-MODE PASSALONG CHAIN
  887. Notes:    when this interrupt is invoked in V86 mode, RM386 will invoke the first
  888.       in a chain of protected-mode handlers, and will only pass execution
  889.       to the V86-mode INT 2C handler if none of the handlers in the
  890.       passalong chain handle the call instead.  This is the method by which
  891.       the real-mode stub of a cloaked application communicates with the
  892.       protected-mode portion.
  893.     the cloaking host calls the passalong chain with EAX=58494E33h ('WIN3')
  894.       when MS Windows starts up and with EAX=334E4958h ('3NIW') when
  895.       Windows shuts down; between these two broadcasts, the additional
  896.       Windows-only Cloaking services are available
  897.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  898.       memory manager included in Helix Software's Netroom
  899. SeeAlso: INT 2C/AX=0009h,INT 2F/AX=4310h"Cloaking"
  900. --------m-2C0000-----------------------------
  901. INT 2C P - Cloaking - ALLOCATE GDT SELECTOR
  902.     AX = 0000h
  903.     EBX = base address
  904.     CL = access mode byte
  905.     CH = extended access mode byte (omit limit field)
  906.     EDX = segment limit
  907. Return: CF clear if successful
  908.         AX = selector
  909.     CF set on error
  910.         AX = error code (see #1891)
  911. Notes:    this INT 2C interface is used by Netroom's DPMI.EXE v3.00
  912.     to access extended memory, set the base address to the desired
  913.       physical address plus 400000h (4M)
  914.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  915.       memory manager included in Helix Software's Netroom
  916. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=0004h,AX=0005h,INT 31/AH=57h,#0405
  917.  
  918. (Table 1891)
  919. Values for Cloaking error code:
  920.  0001h    no more selectors
  921.  0002h    not a GDT ring 0 selector
  922.  0003h    invalid selector (out of range, not user selector)
  923.  0004h    selector not allocated
  924. --------m-2C0001-----------------------------
  925. INT 2C P - Cloaking - FREE GDT SELECTOR
  926.     AX = 0001h
  927.     SI = selector
  928. Return: CF clear if successful
  929.     CF set on error
  930.         AX = error code (see #1891)
  931. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  932. SeeAlso: AX=0000h,INT 2F/AX=4310h"Cloaking"
  933. --------m-2C0002-----------------------------
  934. INT 2C P - Cloaking - SET SEGMENT BASE ADDRESS
  935.     AX = 0002h
  936.     SI = selector
  937.     EBX = new physical base addres
  938. Return: CF clear if successful
  939.     CF set on error
  940.         AX = error code (see #1891)
  941. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  942. SeeAlso: AX=0000h,AX=0003h,AX=0004h,INT 31/AX=0007h,#0405
  943. --------m-2C0003-----------------------------
  944. INT 2C P - Cloaking - SET SEGMENT LIMIT
  945.     AX = 0003h
  946.     SI = selector
  947.     EBX = new limit
  948. Return: CF clear if successful
  949.     CF set on error
  950.         AX = error code (see #1891)
  951. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  952. SeeAlso: AX=0000h,AX=0002h,AX=0004h,INT 31/AX=0008h
  953. --------m-2C0004-----------------------------
  954. INT 2C P - Cloaking - SET SEGMENT ACCESS MODE
  955.     AX = 0004h
  956.     SI = selector
  957.     CL = new access mode byte (see #0406)
  958. Return: CF clear if successful
  959.     CF set on error
  960.         AX = error code (see #1891)
  961. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  962. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0005h,INT 31/AX=0009h
  963. --------m-2C0005-----------------------------
  964. INT 2C P - Cloaking - SET SEGMENT EXTENDED ACCESS MODE
  965.     AX = 0005h
  966.     SI = selector
  967.     CL = new extended access mode byte (limit field ignored) (see #1892)
  968. Return: CF clear if successful
  969.     CF set on error
  970.         AX = error code (see #1891)
  971. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  972. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0004h,INT 31/AX=0009h
  973.  
  974. Bitfields for extended access mode byte:
  975. Bit(s)    Description    (Table 1892)
  976.  7    4K granularity instead of byte granularity
  977.  6    32-bit code segment
  978.  5    reserved (0)
  979.  4    segment available to system
  980. SeeAlso: #0407
  981. --------m-2C0006-----------------------------
  982. INT 2C P - Cloaking - GET PROTECTED-MODE INTERRUPT VECTOR
  983.     AX = 0006h
  984.     CL = vector (00h-7Fh)
  985. Return: CF clear
  986.     DX:EBX -> current interrupt handler
  987. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  988. SeeAlso: AX=0007h,INT 31/AX=0204h
  989. --------m-2C0007-----------------------------
  990. INT 2C P - Cloaking - SET PROTECTED-MODE INTERRUPT VECTOR
  991.     AX = 0007h
  992.     CL = vector (00h-7Fh)
  993.     DX:EBX -> interrupt handler
  994. Return: CF clear
  995. Notes:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  996.     the IDT entry's type remains unchanged
  997. SeeAlso: AX=0006h,INT 31/AX=0205h
  998. --------m-2C0008-----------------------------
  999. INT 2C P - Cloaking - GET PASSALONG ADDRESS
  1000.     AX = 0008h
  1001. Return: CF clear
  1002.     DX:EBX = current passalong address
  1003. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1004. SeeAlso: AX=0009h,AX=002Ch,INT 2F/AX=4310h"Cloaking"
  1005. --------m-2C0009-----------------------------
  1006. INT 2C P - Cloaking - SET PASSALONG ADDRESS
  1007.     AX = 0009h
  1008.     DX:EBX = new value for passalong address (see #1893)
  1009. Return: CF clear
  1010. Notes:    when an INT 2C instruction is executed in V86 mode, the Cloaking host
  1011.       calls the passalong address.    The handler should check whether the
  1012.       upcall is of interest to it, and if not it should jump to the old
  1013.       passalong address (retrieved with AX=0008h before the handler was
  1014.       installed).  The final handler should return with CF clear to cause
  1015.       the interrupt to be reflected back to V86 mode if none of the
  1016.       passalong handlers is triggered
  1017.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1018. SeeAlso: AX=0008h,AX=002Dh,INT 2C"PASSALONG CHAIN"
  1019.  
  1020. (Table 1893)
  1021. Values Cloaking passalong address is called with:
  1022.     EAX = CS:IP of byte following INT 2C instruction invoking passalong
  1023.     SS:EBX -> caller registers (see #1894)
  1024.     CF clear
  1025.     others undefined
  1026. Return: CF clear: pass along to V86-mode INT 2C handler
  1027.     CF set: return immediately to V86 mode
  1028.  
  1029. Format of Cloaking caller registers:
  1030. Offset    Size    Description    (Table 1894)
  1031.  00h    DWORD    EDI
  1032.  04h    DWORD    ESI
  1033.  08h    DWORD    EBP
  1034.  0Ch    DWORD    reserved (ESP from PUSHAD instruction)
  1035.  10h    DWORD    EBX
  1036.  14h    DWORD    EDX
  1037.  18h    DWORD    ECX
  1038.  1Ch    DWORD    EAX
  1039.  20h    DWORD    error code
  1040.  24h    DWORD    EIP
  1041.  28h    WORD    CS
  1042.  2Ah    WORD    padding
  1043.  2Ch    DWORD    EFLAGS
  1044.  30h    DWORD    ESP
  1045.  34h    WORD    SS
  1046.  36h    WORD    padding
  1047. --remainder not available if protected-mode ring3 trap---
  1048.  38h    WORD    ES
  1049.  3Ah    WORD    padding
  1050.  3Ch    WORD    DS
  1051.  3Eh    WORD    padding
  1052.  40h    WORD    FS
  1053.  42h    WORD    padding
  1054.  44h    WORD    GS
  1055.  46h    WORD    padding
  1056. --------m-2C000A-----------------------------
  1057. INT 2C P - Cloaking - GET BASE ADDRESS OF GDT SELECTOR
  1058.     AX = 000Ah
  1059.     SI = selector
  1060. Return: CF clear if successful
  1061.         EBX = segment base address
  1062.     CF set on error
  1063.         AX = error code (see #1891)
  1064. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1065.       memory manager included in Helix Software's Netroom
  1066. SeeAlso: AX=0000h,AX=0002h,AX=000Bh
  1067. --------m-2C000B-----------------------------
  1068. INT 2C P - Cloaking - GET SELECTOR LIMIT
  1069.     AX = 000Bh
  1070.     SI = selector
  1071. Return: CF clear if successful
  1072.         EBX = segment base address
  1073.     CF set on error
  1074.         AX = error code (see #1891)
  1075. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1076. SeeAlso: AX=000Ah,INT 2F/AX=4310h"Cloaking"
  1077. --------m-2C---------------------------------
  1078. INT 2C P - RM386 v6.00 - CLOAKING - RESERVED FOR CLOAKED BIOS USE UNDER WINDOWS
  1079.     AX = function (000Ch-001Fh)
  1080. --------m-2C000F-----------------------------
  1081. INT 2C P - Cloaking v1.01 - "Simulate_Shell_Event"
  1082.     AX = 000Fh
  1083.     ECX = event code (see #1895)
  1084.     DX = subfunction for event
  1085.     EDX high word = boost value (see #1896)
  1086.     SI:EDI -> completion procedure
  1087. Return: CF clear if successful (event scheduled)
  1088.     CF set on error
  1089. Note:    this function is only available while MS Windows is running
  1090. SeeAlso: AX=0011h,AX=0012h,INT 2F/AX=1605h,INT 2F/AX=4310h"Cloaking"
  1091.  
  1092. (Table 1895)
  1093. Values for Cloaking shell event code:
  1094.  0414h    Hot key event
  1095.     subevent 0000h: Alt-Space
  1096.     subevent 0001h: Alt-Enter
  1097.     subevent 0002h: Dir-VM
  1098.  0415h    Switch context
  1099.     subevent 0000h for DOS VM context, nonzero for System VM context
  1100.  0416h    Clipboard event
  1101.  0417h    Termination event
  1102.     subevent 0000h for normal termination, nonzero for error
  1103.  0418h    Display message
  1104.     subevent 0000h for normal message, nonzero for system model ASAP
  1105.  0419h    Crash
  1106.  041Ah    Paste complete
  1107.     subevent 0000h: normal
  1108.     subevent 0001h: cancelled by user
  1109.     subevent 0002h: cancelled
  1110.  041Bh    Contention event
  1111.  041Ch    Screen switch
  1112.     subevent 0000h: forward
  1113.     subevent 0001h: back
  1114.  041Dh    Filesystem change
  1115.  041Eh    Check Focus
  1116.  041Fh    Panic
  1117.  
  1118. Bitfields for boost value:
  1119. Bit(s)    Description    (Table 1896)
  1120.  0    boost system VM until focus changes
  1121.  1    boost system VM on Switcher screen
  1122.  2    boost system VM until response
  1123.  3    boost system VM during clipboard activity
  1124.  4    boost system VM during print screen
  1125.  5    boost system VM during update
  1126. --------m-2C0011-----------------------------
  1127. INT 2C P - Cloaking v1.01 - "Switch_VMs_and_Call_back"
  1128.     AX = 0011h
  1129.     EBX = handle of VM to be made active
  1130.     SI:EDI -> 32-bit FAR completion procedure
  1131. Return: CF clear if successful (scheduled)
  1132.     CF set on error
  1133. Notes:    this function is only available while MS Windows is running
  1134.     the completion procedure is called with CF clear if the specified
  1135.       VM has been made active, or with CF set on error
  1136. SeeAlso: AX=000Fh,AX=0012h
  1137. --------m-2C0012-----------------------------
  1138. INT 2C P - Cloaking v1.01 - "Query_Current_VM"
  1139.     AX = 0012h
  1140. Return: CF clear
  1141.     EBX = handle of active VM
  1142.     ESI = handle of system VM
  1143.     ECX = VM status flags (see #1897)
  1144.     EDX = shell flags (see #1898)
  1145. Note:    this function is only available while MS Windows is running in enhanced
  1146.       mode
  1147. SeeAlso: AX=000Fh,AX=0011h,AX=0013h
  1148.  
  1149. Bitfields for VM status flags:
  1150. Bit(s)    Description    (Table 1897)
  1151.  0    in exclusive mode
  1152.  1    runs in background
  1153.  2    being created
  1154.  3    suspended
  1155.  4    not executable
  1156.  5    executing in protected mode
  1157.  6    contains PM application
  1158.  7    32-bit PM application
  1159.  8    called from VxD
  1160.  9    high priority background
  1161.  10    blocked on semaphore
  1162.  11    awakening
  1163.  12    has pageable V86
  1164.  13    has locked V86
  1165.  14    is scheduled
  1166.  15    idle
  1167.  16    closing
  1168.  
  1169. Bitfields for shell flags:
  1170. Bit(s)    Description    (Table 1898)
  1171.  2    windowed
  1172.  5    Alt-Tab reserved
  1173.  6    Alt-Esc reserved
  1174.  7    Alt-Space reserved
  1175.  8    Alt-PrtSc reserved
  1176.  9    Alt-Enter reserved
  1177.  10    Alt-PrtSc reserved
  1178.  11    PrtSc reserved
  1179.  12    polling enabled
  1180.  13    no HMA
  1181.  14    has shortcut key
  1182.  15    locked EMS handles
  1183.  16    locked XMS handles
  1184.  17    fast paste enabled
  1185.  18    locked V86 memory
  1186.  30    close-on-exit enabled
  1187. --------m-2C0013-----------------------------
  1188. INT 2C P - Cloaking v1.01 - "Issue_System_Modal_Message"
  1189.     AX = 0013h
  1190.     EDX = message box flags (see #1899)
  1191.     DS:ECX -> ASCIZ message text
  1192.     DS:EDI -> ASCIZ caption
  1193. Return: CF clear
  1194.     EAX = response code
  1195. Note:    this function is only available while MS Windows is running in enhanced
  1196.       mode
  1197. SeeAlso: AX=000Fh,AX=0012h
  1198.  
  1199. Bitfields for message box flags:
  1200. Bit(s)    Description    (Table 1899)
  1201.  3-0    response codes (see #1900)
  1202.  7-4    icon codes
  1203.     1 = Warning hand
  1204.     2 = exclamation mark
  1205.     4 = asterisk
  1206.  9-8    default response (0 = first button, 1 = second, 2 = third)
  1207.  12    message is system model
  1208.  15    don't change focus
  1209.  29    hang with interrupts enabled
  1210.  30    do not window
  1211.  31    execute ASAP
  1212.  
  1213. (Table 1900)
  1214. Values for response codes:
  1215.  00h    OK
  1216.  01h    OK, Cancel
  1217.  02h    Abort, Retry, Ignore
  1218.  03h    Yes, No, Cancel
  1219.  04h    Yes, No
  1220.  05h    Retry, Cancel
  1221. --------m-2C001D-----------------------------
  1222. INT 2C P - Cloaking v1.01 - GET INT 2C API HANDLER ENTRY POINT
  1223.     AX = 001Dh
  1224. Return: CF clear
  1225.     DX:EBX = selector:offset of Cloaking host INT 2C handler
  1226. Desc:    get the Cloaking host's entry point to bypass any other programs
  1227.       which may have hooked INT 2C in protected mode
  1228. Note:    the returned entry point must be called with a simulated INT, i.e.
  1229.       a PUSHD must precede the far call to the handler
  1230. SeeAlso: INT 2F/AX=4310h"Cloaking"
  1231. --------m-2C001E-----------------------------
  1232. INT 2C P - Cloaking v1.01 - CLEAR CRITICAL SECTION
  1233.     AX = 001Eh
  1234. Return: CF clear
  1235. Desc:    allow MS Windows to switch to another VM after having prevented it
  1236.       by invoking a critical section
  1237. SeeAlso: AX=001Fh,INT 15/AX=101Ch,INT 2F/AX=1682h
  1238. --------m-2C001F-----------------------------
  1239. INT 2C P - Cloaking v1.01 - SET CRITICAL SECTION
  1240.     AX = 001Fh
  1241. Return: CF clear
  1242. Desc:    prevent MS Windows from switching to another VM
  1243. SeeAlso: AX=001Eh,INT 15/AX=101Bh,INT 2F/AX=1681h
  1244. --------m-2C0020-----------------------------
  1245. INT 2C P - Cloaking - GET SIZE OF PROTECTED-MODE STATE
  1246.     AX = 0020h
  1247. Return: EAX = number of bytes required for storing state
  1248. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1249. SeeAlso: AX=0021h,AX=0022h
  1250. --------m-2C0021-----------------------------
  1251. INT 2C P - Cloaking - SAVE PROTECTED-MODE STATE
  1252.     AX = 0021h
  1253.     ES:EDI -> buffer for protected-mode state
  1254. Return: CF clear
  1255.     buffer filled
  1256. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1257. SeeAlso: AX=0020h,AX=0022h
  1258. --------m-2C0022-----------------------------
  1259. INT 2C P - Cloaking - RESTORE PROTECTED-MODE STATE
  1260.     AX = 0022h
  1261.     DS:ESI -> buffer containing previously-saved protected-mode state
  1262. Return: CF clear if successful
  1263.         state restored
  1264.     CF set on error (invalid buffer contents)
  1265. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1266. SeeAlso: AX=0020h,AX=0021h
  1267. --------m-2C0023-----------------------------
  1268. INT 2C P - Cloaking - ISSUE PROTECTED-MODE XMS CALL
  1269.     AX = 0023h
  1270. Notes:    not currently implemented--NOP in RM386 v6.00
  1271.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1272. --------m-2C0024-----------------------------
  1273. INT 2C P - Cloaking - SET V86-MODE STACK
  1274.     AX = 0024h
  1275.     DX:EBX = new value for V86-mode SS:ESP
  1276. Return: nothing
  1277. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1278. --------m-2C0025-----------------------------
  1279. INT 2C P - Cloaking - CALL V86-MODE PROCEDURE
  1280.     AX = 0025h
  1281.     DS:EBX -> client register structure (see #1894)
  1282. Return: CF clear if successful
  1283.         client register structure updated
  1284.     CF set if no more nested procedure call space available
  1285. Notes:    this call uses the V86-mode stack supplied in the client structure, and
  1286.       calls the routine specified by CS:IP in the client structure
  1287.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1288. SeeAlso: AX=0026h,AX=0027h,INT 31/AX=0301h
  1289. --------m-2C0026-----------------------------
  1290. INT 2C P - Cloaking - CALL V86-MODE INTERRUPT HANDLER
  1291.     AX = 0026h
  1292.     DS:EBX -> client register structure (see #1894)
  1293.     CX = interrupt number
  1294. Return: CF clear if successful
  1295.         client register structure updated
  1296.     CF set if no more nested procedure call space available
  1297. Notes:    this call uses the V86-mode stack supplied in the client structure
  1298.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1299. SeeAlso: AX=0025h,AX=0027h,INT 31/AX=0300h
  1300. --------m-2C0027-----------------------------
  1301. INT 2C P - Cloaking - CHAIN TO V86-MODE INTERRUPT HANDLER
  1302.     AX = 0027h
  1303.     DS:EBX -> client register structure (see #1894)
  1304. Return: CF clear if successful
  1305.         client register structure updated
  1306.     CF set if no more nested procedure call space available
  1307. Notes:    this call uses the V86-mode stack supplied in the client structure,
  1308.       and jumps to the address specified by CS:IP in the client structure
  1309.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1310. SeeAlso: AX=0025h,AX=0026h
  1311. --------m-2C0028-----------------------------
  1312. INT 2C P - Cloaking - GET ESP0 FROM TSS
  1313.     AX = 0028h
  1314. Return: CF clear
  1315.     EAX = TSS's ESP0
  1316. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1317.       memory manager included in Helix Software's Netroom
  1318. --------m-2C0029-----------------------------
  1319. INT 2C P - Cloaking - SET SECONDARY STACK
  1320.     AX = 0029h
  1321.     DX:EBX = new value for SS:ESP of ring 3 secondary stack
  1322. Return: CF clear
  1323. Desc:    inform RM386 of the ring 3 interrupt stack location
  1324. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1325. --------m-2C002A-----------------------------
  1326. INT 2C P - Cloaking - SET 8259 IRQ BASE VECTORS
  1327.     AX = 002Ah
  1328.     BL = base vector of master interrupt controller
  1329.     CL = base vector of slave interrupt controller
  1330. Notes:    this call merely informs RM386 that the caller has changed the
  1331.       interrupt mappings
  1332.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1333. SeeAlso: INT 67/AX=DE0Bh
  1334. --------m-2C002BCH81-------------------------
  1335. INT 2C P - Cloaking - PROTECTED-MODE VIRTUAL DMA SERVICES
  1336.     AX = 002Bh
  1337.     CH = 81h
  1338.     CL = subfunction (02h-0Ch)
  1339.     other registers as appropriate for subfunction
  1340. Return: varies by function
  1341.     CF set on error
  1342. Notes:    these functions are equivalent to the INT 4B/AX=81xxh subfunctions
  1343.       with the same numbers
  1344.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1345. SeeAlso: INT 4B/AX=8102h,INT 4B/AX=810Ch
  1346. --------m-2C002C-----------------------------
  1347. INT 2C P - Cloaking - GET PORT-TRAPPING PASSALONG
  1348.     AX = 002Ch
  1349. Return: CF clear
  1350.     DX:EBX = current I/O trapping passalong address
  1351. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1352. SeeAlso: AX=0008h,AX=002Dh
  1353. --------m-2C002D-----------------------------
  1354. INT 2C P - Cloaking - SET PORT-TRAPPING PASSALONG
  1355.     AX = 002Dh
  1356.     DX:EBX = new I/O trapping passalong address (see #1901)
  1357. Return: CF clear
  1358. Notes:    RM386 calls the passalong address whenever an access to a monitored
  1359.       I/O port is attempted; the handler should check whether it is a port
  1360.       that it is interested in, and if not call the previous passalong
  1361.       address (which was retrieved with AX=002Ch before installing the
  1362.       new handler)
  1363.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1364. SeeAlso: AX=0009h,AX=002Ch,INT 67/AX=5DEAh
  1365.  
  1366. (Table 1901)
  1367. Values Cloaking port-trapping passalong address is called with:
  1368.     EAX = CS:IP of faulting instruction (unless executing in protected-mode
  1369.         ring 3)
  1370.     SS:EBX -> caller register structure (see #1894)
  1371.         check EFLAGS V86-mode bit for type
  1372.     CX = first two bytes of I/O instruction which was trapped
  1373.     DX = port to which I/O is being performed
  1374.     CF clear
  1375. Return: CF clear if RM386 should perform I/O operation
  1376.     CF set if I/O should be skipped
  1377. Note:    RM386 skips the trapped I/O instruction, so the passalong handler
  1378.       should not modify the client CS:EIP
  1379. --------m-2C002E-----------------------------
  1380. INT 2C P - Cloaking - TRAP I/O PORT
  1381.     AX = 002Eh
  1382.     DX = port number to trap
  1383. Return: CF clear if successful
  1384.     CF set on error (port out of range or reserved)
  1385. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1386. SeeAlso: AX=002Fh,AX=0030h
  1387. --------m-2C002F-----------------------------
  1388. INT 2C PU - Cloaking - UNTRAP I/O PORT
  1389.     AX = 002Fh
  1390.     DX = port number for which to cancel trapping
  1391. Return: CF clear if successful
  1392.     CF set on error (port out of range or reserved)
  1393. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1394. SeeAlso: AX=002Eh,AX=0030h
  1395. --------m-2C0030-----------------------------
  1396. INT 2C PU - Cloaking - GET TRAPPING STATE OF SPECIFIED PORT
  1397.     AX = 0030h
  1398.     DX = port number
  1399. Return: CF clear if successful
  1400.        BX = current state (0000h not trapped, 0001h trapped)
  1401.     CF set on error (port out of range or reserved)
  1402. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1403. SeeAlso: AX=002Eh,AX=002Fh
  1404. --------m-2C0031-----------------------------
  1405. INT 2C PU - RM386 v6.00 - BUG
  1406.     AX = 0031h
  1407. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix
  1408.       Software's Netroom
  1409. Note:    due to a fencepost error, RM386 v6.00 will branch unpredictably if
  1410.       invoked with this function
  1411. --------m-2C0031-----------------------------
  1412. INT 2C P - Cloaking v1.01 - ALLOCATE V86 CALLBACK
  1413.     AX = 0031h
  1414.     DX:EBX = CS:EIP of protected-mode routine to be invoked by callback
  1415. Return: CF clear if successful
  1416.         EBX = CS:IP of V86-mode callback handler
  1417.     CF set on error
  1418. SeeAlso: AX=0032h
  1419. --------m-2C0032-----------------------------
  1420. INT 2C P - Cloaking v1.01 - FREE V86 CALLBACK
  1421.     AX = 0032h
  1422.     EBX = CS:IP of V86-mode callback handler
  1423. Return: CF clear if successful
  1424.     CF set on error
  1425.         AX = error code
  1426.         0005h invalid callback address
  1427.         0006h callback already free
  1428. SeeAlso: AX=0032h
  1429. --------m-2C0033-----------------------------
  1430. INT 2C P - Cloaking v1.01 - REGISTER CLOAKING CLIENT
  1431.     AX = 0033h
  1432.     DS:EDX -> client registration structure (see #1902)
  1433. Return: CF clear if successful
  1434.     CF set on error (linked list corrupt)
  1435. SeeAlso: AX=0034h,#2058 at INT 2F/AX=4310h"Cloaking"
  1436.  
  1437. Format of client registration structure:
  1438. Offset    Size    Description    (Table 1902)
  1439.  00h    PWORD    link to next structure
  1440.  06h    PWORD    link to previous structure
  1441.  0Ch  2 BYTEs    client version (major, minor)
  1442.  0Eh 20 BYTEs    client name
  1443.  22h    DWORD    physical address of client start
  1444.  26h    DWORD    client's total size in bytes
  1445. Note:    the link area should not be modified once the structure has been
  1446.       used for the registration call
  1447. --------m-2C0034-----------------------------
  1448. INT 2C P - Cloaking v1.01 - UNREGISTER CLOAKING CLIENT
  1449.     AX = 0034h
  1450.     DS:EDX -> client registration structure (see #1902)
  1451. Return: CF clear if successful
  1452.     CF set on error (linked list corrupt)
  1453. Note:    the client must unregister before freeing the XMS block containing
  1454.       its registration structure(s)
  1455. SeeAlso: AX=0033h,#2058 at INT 2F/AX=4310h"Cloaking"
  1456. --------D-2D---------------------------------
  1457. INT 2D - DOS 2+ - RESERVED
  1458. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  1459. BUG:    RM386 v6.00-6.02 (as distributed with Helix's Netroom v3.x) contains
  1460.       a stack bug in its protected-mode INT 2D handler which causes a crash
  1461.       when INT 2D is invoked from V86 mode
  1462. --------t-2D---------------------------------
  1463. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.6]
  1464.     AH = multiplex number
  1465.     AL = function
  1466.         00h installation check
  1467.         01h get private entry point
  1468.         02h uninstall
  1469.         03h request popup
  1470.         04h determine chained interrupts
  1471.         05h get hotkey list
  1472.         06h get device-driver information
  1473.         07h-0Fh reserved for future enhancements
  1474.         Return: AL = 00h (not implemented)
  1475.         other  application-dependent
  1476.     other registers vary by function (also see individual entries below)
  1477. Return: varies by function
  1478. Notes:    programs should not use fixed multiplex numbers; rather, a program
  1479.       should scan all multiplex numbers from 00h to FFh, remembering the
  1480.       first unused multiplex in case the program is not yet installed.
  1481.       For multiplex numbers which are in use, the program should compare
  1482.       the first 16 bytes of the signature string to determine whether it
  1483.       is already installed on that multiplex number.  If not previously
  1484.       installed, it should use the first free multiplex number.
  1485.     functions other than 00h are not valid unless a program is installed
  1486.       on the selected multiplex number
  1487.     to be considered fully compliant with version 3.6 of the specification,
  1488.       programs must implement at least functions 00h, 02h (no resident
  1489.       uninstall code required), and 04h (return value 04h).     TSRs that
  1490.       provide hotkeys with which the user can activate them must also
  1491.       implement function 05h.  TSRs which provide DOS device drivers must
  1492.       also implement function 06h.    The absolute minimum fully-compliant
  1493.       implementation has an overhead of 64 bytes (80 bytes with function
  1494.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  1495.       protocol header and hook list entry).
  1496.     the signature string and description may be used by memory mappers
  1497.       to display the installed programs
  1498.     to be considered fully compliant, users of this specification must
  1499.       adhere to the IBM interrupt sharing protocol (see #1903), which will
  1500.       permit removal of TSRs in arbitrary order and interrupt handler
  1501.       reordering.  All TSRs following this specification should be
  1502.       removable unless they are loaded from CONFIG.SYS, though they need
  1503.       not keep the code for removing themselves resident; it is acceptable
  1504.       for a separate program to perform the interrupt unhooking and
  1505.       memory-freeing steps of removal.
  1506.     A sample public-domain implementation including example TSRs and
  1507.       utility programs may be found in a separate package distributed as
  1508.       AMISLnnn.ZIP (AMISL092.ZIP as of this writing).
  1509.     Please let me know if you choose to follow this proposal.  The
  1510.       signature and a list of the private API calls you use would be
  1511.       appreciated, as well.
  1512. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  1513. SeeAlso: INT 2D/AL=05h,INT 2D/AL=06h,INT 2F"NOTES"
  1514.  
  1515. Format of interrupt sharing protocol interrupt handler entry point:
  1516. Offset    Size    Description    (Table 1903)
  1517.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  1518.           following this data block (EBh 10h)
  1519.  02h    DWORD    address of next handler in chain
  1520.  06h    WORD    signature 424Bh
  1521.  08h    BYTE    EOI flag
  1522.         00h software interrupt or secondary hardware interrupt handler
  1523.         80h primary hardware interrupt handler (will issue EOI)
  1524.  09h  2 BYTEs    short jump to hardware reset routine
  1525.         must point at a valid FAR procedure (may be just RETF)
  1526.  0Bh  7 BYTEs    reserved (0) by IBM for future expansion
  1527. Note:    when chaining to the prior handler, the interrupt handler must perform
  1528.       an indirect jump/call using the address at offset 02h in the
  1529.       ISP header.  This permits another AMIS TSR to hook itself into
  1530.       the chain at a position other than as the first handler to receive
  1531.       an interrupt.
  1532. SeeAlso: INT F1/AH=01h"Common ISDN API",INT F1/AH=06h"CAPI",#3281
  1533. --------t-2D--00-----------------------------
  1534. INT 2D - AMIS v3.0+ - INSTALLATION CHECK
  1535.     AL = 00h
  1536.     AH = multiplex number for program
  1537. Return: AL = 00h if free
  1538.     AL = FFh if multiplex number in use
  1539.         CX = binary version number (CH = major, CL = minor)
  1540.         DX:DI -> signature string (see #1904) identifying the program
  1541.           using the multiplex number
  1542. SeeAlso: INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  1543. SeeAlso: INT 2D/AL=06h
  1544. Index:    installation check;Alternate Multiplex Interrupt Specification
  1545. Index:    installation check;AMIS|installation check;FASTMOUS
  1546. Index:    installation check;SPELLER|installation check;Monitor
  1547. Index:    installation check;NOLPT|installation check;NOTE
  1548. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  1549. Index:    installation check;VGABLANK|installation check;EATMEM
  1550. Index:    installation check;RECALL|installation check;XPTR2
  1551.  
  1552. Format of AMIS signature string:
  1553. Offset    Size    Description    (Table 1904)
  1554.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  1555.  08h  8 BYTEs    blank-padded product name
  1556.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  1557. Note:    it is not necessary to reserve a full 64 bytes for the description,
  1558.       just enough to store the actual ASCIZ string
  1559. SeeAlso: #1905
  1560.  
  1561. (Table 1905)
  1562. Values for AMIS signatures known to be in use:
  1563.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  1564.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  1565.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  1566.  'CPH1995 ' 'CDTSR   '    resident CD-Audio player
  1567.  'CPH1996 ' 'DSAPI   '
  1568.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  1569.  'DAISYCHA' 'INDRIVER'    Advanced Parallel Port daisy chain driver (vendor name
  1570.               in product description field, if desired)
  1571.             (see also INT 2D/AL=DCh)
  1572.  'DTown SD' 'DTU     '    DTown Software Development's DTown Utilities
  1573.             (see also INT 2D/AL=20h)
  1574.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  1575.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  1576.  'heathh  ' 'Monitor '
  1577.  'Helge O '        TSRs by Helge Olav Helgesen
  1578.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  1579.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  1580.  'M Better' 'iHPFS   '    Marcus Better's HPFS filesystem driver for DOS
  1581.  'M. Paul ' 'FREEVER '    DOS version-faking TSR by Matthias Paul
  1582.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  1583.  'Pino Nav' 'ALTMENU '    activate any program's menu bar by pressing Alt key
  1584.  'Pino Nav' 'Keybit  '    Pino Navato's KEYBIT Lite Italian keyboard driver v4+
  1585.  'PowrQuot' 'CAPRILOG'
  1586.  'PowrQuot' 'CAPRITSR'
  1587.  'PowrQuot' 'CAPRIWIN'
  1588.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  1589.  'Ralf B  ' 'disaXXYY'    RBdisabl -- disable key scancode XX w/ shift states YY
  1590.  'Ralf B  ' 'DUALVGA '    dual-VGA support, screen blanker, and DPMS driver
  1591.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  1592.  'Ralf B  ' 'NoBreak '    disable Ctrl-@, Ctrl-C, and Ctrl-Break keys
  1593.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  1594.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  1595.  'Ralf B  ' 'RBclock '    RBclock -- on-screen real-time clock
  1596.  'Ralf B  ' 'RBclockE'    RBclock -- on-screen elapsed-time clock
  1597.  'Ralf B  ' 'RBdvorak'    Dvorak keyboard mapping w/ opt Esc/~, LCtrl/CapsLk swap
  1598.  'Ralf B  ' 'RBkcount'    display count of keystrokes on screen
  1599.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  1600.  'Ralf B  ' 'RBnoboot'    disable Ctrl-Alt-Del key combination
  1601.  'Ralf B  ' 'ShftCaps'    require Shift-CapsLock to turn on CapsLock
  1602.  'Ralf B  ' 'ShftNumL'    require Shift-NumLock to turn off NumLock
  1603.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  1604.  'Ralf B  ' 'VGABLANK'    VGA-only screen blanker
  1605.  'Ralf B  ' 'WINTAME '    yield CPU when program in Win95 DOS box is idle
  1606.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  1607.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  1608.  'SRT      ' 'STOPBOOT'    reboot preventer by Steve Talbot
  1609.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  1610.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  1611.             testing programs (v1.1+)
  1612.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  1613.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  1614.  'WlkngOwl' 'NoiseSYS'    NOISE.SYS random-number generator
  1615. SeeAlso: #1904
  1616. --------t-2D--01-----------------------------
  1617. INT 2D - AMIS v3.0+ - GET PRIVATE ENTRY POINT
  1618.     AL = 01h
  1619.     AH = multiplex number for program
  1620. Return: AL = 00h if all API calls via INT 2D
  1621.     AL = FFh if entry point supported
  1622.         DX:BX -> entry point for bypassing interrupt chain
  1623. Note:    this function is not valid unless a program is installed on the
  1624.       specified multiplex number; use INT 2D/AL=00h to check
  1625. SeeAlso: INT 2D/AL=00h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  1626. SeeAlso: INT 2D/AL=06h
  1627. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  1628. --------t-2D--02-----------------------------
  1629. INT 2D - AMIS v3.0+ - UNINSTALL
  1630.     AL = 02h
  1631.     AH = multiplex number for program
  1632.     DX:BX = return address for successful uninstall (may be    ignored by TSR)
  1633. Return: AL = status
  1634.         00h not implemented (makes TSR non-compliant with specification)
  1635.         01h unsuccessful
  1636.         02h can not uninstall yet, will do so when able
  1637.         03h safe to remove, but no resident uninstaller
  1638.           (TSR still enabled)
  1639.         BX = segment of memory block with resident code
  1640.         04h safe to remove, but no resident uninstaller
  1641.           (TSR now disabled)
  1642.         BX = segment of memory block with resident code
  1643.         05h not safe to remove now, try again later
  1644.         06h disabled, but can not be removed from memory
  1645.           because loaded from CONFIG.SYS
  1646.         07h safe to remove, but no resident device-driver
  1647.           uninstaller.    Caller must unlink device
  1648.           drivers from DOS device chain as well as
  1649.           unhooking interrupts and freeing memory
  1650.         BX = segment of memory block with resident code
  1651.         FFh successful
  1652.     return at DX:BX with AX destroyed if successful and TSR honors
  1653.       specific return address
  1654. Note:    this function is not valid unless a program is installed on the
  1655.       specified multiplex number; use INT 2D/AL=00h to check
  1656. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  1657. SeeAlso: INT 2D/AL=06h
  1658. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  1659. --------t-2D--03-----------------------------
  1660. INT 2D - AMIS v3.0+ - REQUEST POP-UP
  1661.     AL = 03h
  1662.     AH = multiplex number for program
  1663. Return: AL = status
  1664.         00h not implemented or TSR is not a pop-up
  1665.         01h can not pop up at this time, try again later
  1666.         02h can not pop up yet, will do so when able
  1667.         03h already popped up
  1668.         04h unable to pop up, user intervention required
  1669.         BX = standard reason code
  1670.             0000h unknown failure
  1671.             0001h interrupt chain passes through memory
  1672.               which must be swapped out to pop up
  1673.             0002h swap-in failed
  1674.         CX = application's reason code if nonzero
  1675.         FFh TSR popped up and was exited by user
  1676.         BX = return value
  1677.             0000h no return value
  1678.             0001h TSR unloaded
  1679.             0002h-00FFh reserved
  1680.             0100h-FFFFh application-dependent
  1681. Note:    this function is not valid unless a program is installed on the
  1682.       specified multiplex number; use INT 2D/AL=00h to check
  1683. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=04h,INT 2D/AL=05h
  1684. SeeAlso: INT 2D/AL=06h
  1685. --------t-2D--04-----------------------------
  1686. INT 2D - AMIS v3.0+ - DETERMINE CHAINED INTERRUPTS
  1687.     AL = 04h
  1688.     AH = multiplex number for program
  1689.     BL = interrupt number (except 2Dh)
  1690. Return: AL = status
  1691.         00h not implemented (makes TSR non-compliant with specification)
  1692.         01h (obsolete) unable to determine
  1693.         02h (obsolete) interrupt hooked
  1694.         03h (obsolete) interrupt hooked, address returned
  1695.         DX:BX -> TSR's interrupt BL handler
  1696.         04h list of hooked interrupts returned
  1697.         DX:BX -> interrupt hook list (see #1906)
  1698.         FFh interrupt not hooked
  1699. Notes:    BL is ignored if the TSR returns AL=04h; in that case, the caller
  1700.       needs to scan the return list rather than making additional calls
  1701.       to this function.  If the return is not 00h or 04h, then the caller
  1702.       must cycle through the remaining interrupt numbers it wishes to
  1703.       check.
  1704.     return values 01h through 03h may not be used by AMIS v3.6-compliant
  1705.       programs; they are included here solely for compatibility with
  1706.       version 3.3, though they were probably never used in any
  1707.       implementation
  1708.     for return values 01h through 03h, since INT 2D is known to be hooked,
  1709.       the resident code need not test for BL=2Dh (to minimize its size),
  1710.       and the return value is therefore undefined in that case.
  1711.     this function is not valid unless a program is installed on the
  1712.       specified multiplex number; use INT 2D/AL=00h to check
  1713. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=05h
  1714. SeeAlso: INT 2D/AL=06h
  1715.  
  1716. Format of AMIS interrupt hook list [array]:
  1717. Offset    Size    Description    (Table 1906)
  1718.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  1719.  01h    WORD    offset within hook list's segment of the interrupt handler
  1720.         this will point at the initial short jump of the interrupt
  1721.           sharing protocol header (see #1903)
  1722. SeeAlso: #1907
  1723. --------t-2D--05-----------------------------
  1724. INT 2D - AMIS v3.5+ - GET HOTKEYS
  1725.     AL = 05h
  1726.     AH = multiplex number for program
  1727. Return: AL = status
  1728.         00h not implemented
  1729.         FFh supported
  1730.         DX:BX -> hotkey list (see #1907)
  1731. Notes:    this function is not valid unless a program is installed on the
  1732.       specified multiplex number; use INT 2D/AL=00h to check
  1733.     programs which provide hotkeys are required to provide this function
  1734.       to be fully compliant with this specification
  1735. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  1736. SeeAlso: INT 2D/AL=06h
  1737.  
  1738. Format of AMIS hotkey list:
  1739. Offset    Size    Description    (Table 1907)
  1740.  00h    BYTE    type of hotkey checking (see #1908)
  1741.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  1742.  02h 6N BYTEs    array of hotkey definitions
  1743.         (one per hotkey, first should be primary hotkey)
  1744.         Offset    Size    Description
  1745.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  1746.                 hotkey triggers on release if bit 7 set
  1747.          01h    WORD    required shift states (see #1909)
  1748.          03h    WORD    disallowed shift states (see #1909)
  1749.          05h    BYTE    hotkey flags (see #1910)
  1750. Notes:    except for bit 7, the shift states correspond exactly to the return
  1751.       values from INT 16/AH=12h.  A set bit in the required states word
  1752.       indicates that the corresponding shift state must be active when the
  1753.       hotkey's scan code is received for the hotkey to be recognized; a
  1754.       clear bit means that the corresponding state may be ignored.    A set
  1755.       bit in the disallowed shift states word indicates that the
  1756.       corresponding shift state must be inactive.
  1757.     for the disallowed-states word, if one of the "either" bits is set,
  1758.       then both the corresponding left bit and right bit must be set
  1759.     examples:
  1760.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  1761.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  1762.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  1763. Index:    hotkeys;AMIS
  1764. SeeAlso: #0005
  1765.  
  1766. Bitfields for type of AMIS hotkey checking:
  1767. Bit(s)    Description    (Table 1908)
  1768.  0    checks before chaining INT 09
  1769.  1    checks after chaining INT 09
  1770.  2    checks before chaining INT 15/AH=4Fh
  1771.  3    checks after chaining INT 15/AH=4Fh
  1772.  4    checks on INT 16/AH=00h,01h,02h
  1773.  5    checks on INT 16/AH=10h,11h,12h
  1774.  6    checks on INT 16/AH=20h,21h,22h
  1775.  7    reserved (0)
  1776. SeeAlso: #1907
  1777.  
  1778. Bitfields for AMIS shift states:
  1779. Bit(s)    Description    (Table 1909)
  1780.  0    right shift pressed
  1781.  1    left shift pressed
  1782.  2    either control key pressed
  1783.  3    either Alt key pressed
  1784.  4    ScrollLock active
  1785.  5    NumLock active
  1786.  6    CapsLock active
  1787.  7    either shift key pressed
  1788.  8    left control key pressed
  1789.  9    left Alt key pressed
  1790.  10    right control key pressed
  1791.  11    right Alt key pressed
  1792.  12    ScrollLock pressed
  1793.  13    NumLock pressed
  1794.  14    CapsLock pressed
  1795.  15    SysReq key pressed
  1796. Notes:    if bit 2 is set, either control key may be pressed for the hotkey; if
  1797.       bits 8 and 10 are both set, then both control keys must be pressed.
  1798.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  1799.     the SysReq key is often labeled SysRq
  1800. SeeAlso: #1907,#1910
  1801.  
  1802. Bitfields for AMIS hotkey flags:
  1803. Bit(s)    Description    (Table 1910)
  1804.  0    hotkey chained before processing
  1805.  1    hotkey chained after processing
  1806.  2    others should pass through this hotkey so that it can be monitored
  1807.  3    hotkey will not activate if other keys pressed/released before hotkey
  1808.       press is completed
  1809.  4    this key is remapped into some other key
  1810.  5    this key is conditionally chained (sometimes passed on, sometimes
  1811.       swallowed)
  1812.  6-7    reserved (0)
  1813. SeeAlso: #1907,#1909
  1814. --------t-2D--06-----------------------------
  1815. INT 2D - AMIS v3.6 - GET DEVICE-DRIVER INFORMATION
  1816.     AL = 06h
  1817.     AH = multiplex number for program
  1818. Return: AL = number of device driver headers supplied by prog.
  1819.     AH = device-driver flags (see #1911)
  1820.     DX:BX -> first device driver header (see #0987)
  1821. Program: AMIS is the Alternate Multiplex Interrupt Specification promulgated
  1822.       by Ralf Brown
  1823. Notes:    if AL=00h, AH,BX,DX are meaningless and may be destroyed
  1824.     this function is not valid unless a program is installed on the
  1825.       specified multiplex number; use INT 2D/AL=00h to check
  1826.     programs which provide device drivers are required to support this
  1827.       function to be considered fully compliant with v3.6+ of the
  1828.       specification
  1829. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  1830. SeeAlso: INT 2D/AL=05h
  1831.  
  1832. Bitfields for AMIS device-driver information flags:
  1833. Bit(s)    Description    (Table 1911)
  1834.  0    program loaded from CONFIG.SYS, and thus can not be removed from memory
  1835.     (leave clear if unable to determine)
  1836.  1    device driver headers have not been linked into DOS device chain
  1837.  2    reentrant device driver(s)
  1838. --------N-2D--10-----------------------------
  1839. INT 2D - RATSR 2.0+ - GET STATUS
  1840.     AL = 10h
  1841.     AH = AMIS multiplex number for RATSR
  1842. Return: AL = status
  1843.         01h listening (no connection)
  1844.         02h receiving          \
  1845.         03h sending               > station being monitored
  1846.         04h initializing receive  /
  1847.     AH = keyboard lock status (00h unlocked, 01h locked)
  1848. Program: RATSR is a utility by James Berry provided with
  1849.       RemoteAccess/Professional, a commercial bulletin board system, that
  1850.       allows remote control of a station over a network
  1851. SeeAlso: INT 2D"AMIS"
  1852. --------d-2D--10-----------------------------
  1853. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  1854.     AL = 10h
  1855.     AH = AMIS multiplex number for dLite
  1856. Return: CF clear if successful
  1857.         ES:BX -> parameter block (see #1912)
  1858.     CF set on error
  1859. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  1860.       expands compressed files when they are read
  1861. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  1862.  
  1863. Format of dLite parameter block:
  1864. Offset    Size    Description    (Table 1912)
  1865.  00h    BYTE    TSR flags (see #1913)
  1866.  01h    WORD    maximum number of programs needing original filesize
  1867.  03h    WORD    current number of programs needing original filesize
  1868.  05h    WORD    maximum number of files that can be handled by dLite (should
  1869.           be the same as FILES= in CONFIG.SYS)
  1870.  07h    WORD    offset (in the same segment as the parameter block) of the
  1871.           table of programs needing the original filesize (8 bytes
  1872.           each,    without path or extension, uppercase, and zero \
  1873.           terminated if    shorter than 8 bytes)
  1874.  
  1875. Bitfields for dLite TSR flags:
  1876. Bit(s)    Description    (Table 1913)
  1877.  0    deny FCB access
  1878.  1    dLite sleeping rather than activated
  1879.  2    always indicate original filesize when reading directory entries,
  1880.       rather than only for specified programs
  1881.  3-7    reserved
  1882. SeeAlso: #1912
  1883. --------V-2D--10-----------------------------
  1884. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  1885.     AL = 10h
  1886.     AH = AMIS multiplex number for Burnout Plus
  1887. Return: AL = 01h
  1888.     BX = Burnout Plus status (see #1914)
  1889.     CX = record of features loaded (see #1915)
  1890.     ES:DI -> Burnout Plus control structure (see #1916)
  1891. Program: Burnout Plus is a DOS screen saver from Cove Software
  1892. SeeAlso: INT 14/AX=AA01h,INT 2D"AMIS"
  1893. Index:    screen saver;Burnout Plus
  1894.  
  1895. Bitfields for Burnout Plus status:
  1896. Bit(s)    Description    (Table 1914)
  1897.  0    screen is blanked
  1898.  1    MS Windows is active (Burnout Plus deactivated)
  1899.  2-15    reserved
  1900.  
  1901. Bitfields for Burnout Plus features loaded/features enabled:
  1902. Bit(s)    Description    (Table 1915)
  1903.  0    mouse activity monitor
  1904.  1    passkey support
  1905.  2    password support
  1906.  3    continuous clear
  1907.  4    software blanking
  1908.  5    video activity monitor
  1909.  6    disk activity monitor
  1910.  7    activating keystroke suppression
  1911. SeeAlso: #1916
  1912.  
  1913. Format of Burnout Plus control structure:
  1914. Offset    Size    Description    (Table 1916)
  1915.  00h    BYTE    size of structure in bytes
  1916.  01h    WORD    Burnout Plus version
  1917.  03h    WORD    screen blanking reset count in clock ticks
  1918.  05h    WORD    current countdown value in clock ticks
  1919.  07h    BYTE    type of timeout specification
  1920.  08h    BYTE    instant-blank hotkey
  1921.  09h    WORD    extended status information (see #1917)
  1922.         the bits for password, passkey, and software blanking are
  1923.           ignored and cannot be enabled or disabled externally
  1924.  0Bh    WORD    features enabled (see #1915)
  1925. Note:    all fields except the first two may be modified by external programs
  1926.       to affect the operation of Burnout Plus
  1927. Index:    hotkeys;Burnout Plus
  1928.  
  1929. Bitfields for extended Burnout Plus status information:
  1930. Bit(s)    Description    (Table 1917)
  1931.  0    Burnout Plus disabled
  1932.  1    force screen to blank on next clock tick
  1933.  2    restore screen if currently blanked
  1934.  3-15    reserved
  1935. Note:    1 and 2 are automatically cleared by Burnout Plus after blanking
  1936.       or restoring the screen
  1937. SeeAlso: #1916
  1938. --------V-2D--10-----------------------------
  1939. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  1940.     AL = 10h
  1941.     AH = AMIS multiplex number for Screen Thief
  1942. Return: nothing
  1943. Program: Screen Thief is a graphics screen grabber
  1944. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  1945.       does not release the low-memory stub; this may be used to effect a
  1946.       partial uninstall if INT 2D/AL=02h fails
  1947. SeeAlso: INT D8"Screen Thief"
  1948. --------i-2D--10-----------------------------
  1949. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  1950.     AL = 10h
  1951.     AH = AMIS multiplex number for RAMLIGHT
  1952. Return: ES:BX -> array of fake device driver headers used in monitoring
  1953.     CX = number of drives being monitored???
  1954. --------U-2D--10-----------------------------
  1955. INT 2D - DTown Utilities v1.40+ - EXTENDED API INSTALLATION CHECK
  1956.     AL = 10h
  1957. Return: AL = FFh
  1958.     BL = extended API availability (00h no, 01h API is loaded)
  1959. SeeAlso: INT 2D/AL=11h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  1960. --------s-2D--10-----------------------------
  1961. INT 2D - CDTSR - GET INTERNAL VARIABLE TABLE
  1962.     AL = 10h
  1963.     AH = AMIS multiplex number for CDTSR
  1964. Return: CX:DX -> CDTSR internal variable structure (see #1918)
  1965. Program: CDTSR is a resident audio CD player by Colin Hill
  1966. SeeAlso: INT 2D/AL=11h"CDTSR",INT 2D/AL=12h"CDTSR",INT 2D/AL=13h"CDTSR"
  1967.  
  1968. Format of CDTSR internal variable structure:
  1969. Offset    Size    Description    (Table 1918)
  1970.  00h    BYTE    hotkey scan code (see #0005)
  1971.  01h    BYTE    hotkey shift states
  1972.  02h    BYTE    flag: repeat
  1973.  03h    BYTE    flag: custom repeat
  1974.  04h    BYTE    flag: background polling
  1975.  05h    DWORD    (read-only) internal timing variable
  1976.  09h    DWORD    current track play position, in frames
  1977.  0Dh    DWORD    current disk play position, in frames
  1978.  11h    BYTE    number of entries in track program
  1979.  12h    BYTE    index into track program currently playing (FFh if not playing)
  1980.  13h 100 BYTEs    track program (each byte contains one track number)
  1981.  77h    BYTE    saved cursor end scan line
  1982.  78h    BYTE    saved cursor start scan line
  1983.  79h    BYTE    currently playing track
  1984.  7Ah    BYTE    CD driver media-change flag
  1985.  7Bh    WORD    video base segment during last popup
  1986.  7Dh    WORD    video page offset during last popup
  1987.  7Fh    BYTE    currently-selected track
  1988.  80h    DWORD    begin of custom repeat, in frames
  1989.  84h    DWORD    end of custom repeat, in frames
  1990.  88h    WORD    track program index of top list item
  1991. --------K-2D--10-----------------------------
  1992. INT 2D - KEYBIT Lite v5+ - GET POINTER TO STATUS BYTE
  1993.     AL = 10h
  1994.     AH = AMIS multiplex number for KEYBIT Lite
  1995. Return: DX:BX -> status byte (see #1919)
  1996. Program: KEYBIT Lite is an enhanced Italian keyboard driver by Pino Navato.
  1997. SeeAlso: INT 2D"AMIS"
  1998.  
  1999. Bitfields for KEYBIT Lite status byte:
  2000. Bit(s)    Description    (Table 1919)
  2001.  7    KEYBIT Lite active
  2002.  6    E-mail support active
  2003.  5-0    reserved
  2004. Notes:    E-mail support is one of the original features of KEYBIT Lite.    It is
  2005.       the automatic conversion of the 8-bits ASCII chars produced by some
  2006.       keys available on Italian keyboards to couples of 7-bits chars.
  2007.     Message editors should always enable e-mail support, they should also
  2008.       restore its original status before exiting.
  2009.     The user can change both status bits by hotkeys.
  2010. --------K-2D--10-----------------------------
  2011. INT 2D - ALTMENU - GET POINTER TO KEY CODE
  2012.     AL = 10h
  2013.     AH = AMIS multiplex number for signature 'Pino Nav' 'ALTMENU '
  2014. Return: DX:BX -> WORD key code to insert in keyboard buffer on Alt-key tap
  2015. Program: Pino Navato's freeware ALTMENU permits activating the menu bar of
  2016.       any program by pressing the Alt key alone.
  2017. Notes:    The value in the key code word will be returned in AX by a call to
  2018.       INT 16/AH=00h after the Alt key is pressed by itself
  2019.     ALTMENU may be disabled by setting the key code equal to 0000h
  2020. SeeAlso: INT 16/AH=00h,INT 2D"AMIS"
  2021. --------d-2D--11-----------------------------
  2022. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  2023.     AL = 11h
  2024.     AH = AMIS multiplex number for dLite
  2025.     BX = file handle
  2026. Return: CF clear if successful
  2027.         DX:AX = size of uncompressed file
  2028.     CF set on error (not dPressed file)
  2029. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  2030. --------U-2D--11-----------------------------
  2031. INT 2D - DTown Utilities v1.40+ - UTILITY INSTALLATION CHECK
  2032.     AL = 11h
  2033.     BL = function
  2034.         00h get number of installed utilities
  2035.         Return: BL = number of utilities
  2036.         01h get installed utilities
  2037.         DX:DI -> buffer containing one byte for each utility
  2038.         Return: DX:DI buffer filled with flags (0=no,1=yes) indicating
  2039.               whether the corresponding utility is loaded
  2040. Return: AL = FFh if supported
  2041. Note:    this function is only available if the extended API has been installed
  2042.       in the resident portion
  2043. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h
  2044. --------s-2D--11-----------------------------
  2045. INT 2D - CDTSR - REPROGRAM CDTSR
  2046.     AL = 11h
  2047.     AH = AMIS multiplex number for CDTSR
  2048. Return: nothing
  2049. Program: CDTSR is a resident audio CD player by Colin Hill
  2050. Desc:    reprograms CDTSR based on the values in the internal variable
  2051.       structure (see #1918), which may have been changed by an application
  2052. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=12h"CDTSR",INT 2D/AL=13h"CDTSR"
  2053. --------d-2D--12-----------------------------
  2054. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  2055.     AL = 12h
  2056.     AH = AMIS multiplex number for dLite
  2057.     BX = file handle
  2058. Return: CF clear if successful
  2059.         DX:AX = size of compressed file
  2060.     CF set on error (not dPressed file)
  2061. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  2062. --------s-2D--12-----------------------------
  2063. INT 2D - CDTSR - DISABLE POPUP
  2064.     AL = 12h
  2065.     AH = AMIS multiplex number for CDTSR
  2066. Return: nothing
  2067. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=11h"CDTSR",INT 2D/AL=13h"CDTSR"
  2068. --------U-2D--12-----------------------------
  2069. INT 2D - FREEVER - GET ORIGINAL DOS VERSION INFO
  2070.     AL = 12h
  2071.     AH = AMIS multiplex number for FREEVER
  2072. Return: AL = FFh if successful
  2073.         BH = major DOS version
  2074.         BL = minor DOS version
  2075.         CH = DOS version flag
  2076.         CL = OEM number
  2077.         DH = major DR DOS version number (FFh if unknown)
  2078.         DL = minor DR DOS version number (FFh if unknown)
  2079. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  2080.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  2081. SeeAlso: INT 2D/AL=13h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=17h"FREEVER"
  2082. --------s-2D--13-----------------------------
  2083. INT 2D - CDTSR - ENABLE POPUP
  2084.     AL = 13h
  2085.     AH = AMIS multiplex number for CDTSR
  2086. Return: nothing
  2087. Program: CDTSR is a resident audio CD player by Colin Hill
  2088. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=11h"CDTSR",INT 2D/AL=12h"CDTSR"
  2089. --------U-2D--13-----------------------------
  2090. INT 2D - FREEVER - SET VERSION NUMBERS
  2091.     AL = 13h
  2092.     AH = AMIS multiplex number for FREEVER
  2093.     BH = new major DOS version
  2094.     BL = new minor DOS version
  2095.     CH = new DOS version flag
  2096.     CL = new DOS revision number
  2097.     DH = new OEM number
  2098. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=17h"FREEVER"
  2099. --------U-2D--14-----------------------------
  2100. INT 2D - FREEVER - ENABLE TSR
  2101.     AL = 14h
  2102.     AH = AMIS multiplex number for FREEVER
  2103. Return: AL = FFh if successful
  2104. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=16h"FREEVER"
  2105. --------U-2D--15-----------------------------
  2106. INT 2D - FREEVER - DISABLE TSR
  2107.     AL = 15h
  2108.     AH = AMIS multiplex number for FREEVER
  2109. Return: AL = FFh if successful
  2110. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=16h"FREEVER"
  2111. --------U-2D--16-----------------------------
  2112. INT 2D - FREEVER - GET TSR STATUS
  2113.     AL = 16h
  2114.     AH = AMIS multiplex number for FREEVER
  2115. Return: AL = FFh if successful
  2116.         BL = status
  2117.         01h resident and active
  2118.         02h resident and inactive
  2119. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=17h"FREEVER"
  2120. --------U-2D--17-----------------------------
  2121. INT 2D - FREEVER - GET TaskMAX STATUS AT INSTALLATION
  2122.     AL = 17h
  2123.     AH = AMIS multiplex number for FREEVER
  2124. Return: AL = FFh if successful
  2125.         BL = status
  2126.         00h if TaskMAX not loaded before SETDRVER
  2127.         FFh if TaskMAX was loaded before SETDRVER
  2128. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  2129.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  2130. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=16h"FREEVER"
  2131. --------U-2D--20-----------------------------
  2132. INT 2D - DTown Utilities v1.40+ - GET POP-UP HANDLER ADDRESS
  2133.     AL = 20h
  2134. Return: AL = FFh if available
  2135.         DX:DI -> DTU popup-handler
  2136. Program: DTown Utilities is a freeware programmer's utility TSR by Jeroen van
  2137.       Disseldorp
  2138. Note:    this function is only available if the extended API has been installed
  2139.       in the resident portion
  2140. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=21h,INT 2D/AL=50h,INT 2D/AL=51h
  2141. SeeAlso: INT 03"DTown"
  2142. --------U-2D--21-----------------------------
  2143. INT 2D - DTown Utilities v1.40+ - POP UP
  2144.     AL = 21h
  2145.     BL = which utility to bring up
  2146.         00h active utility
  2147.         01h help screen
  2148.         0Ah ASCII table
  2149.         0Bh memory view
  2150.         0Ch CPU status
  2151.         0Dh calculator
  2152.         0Eh miscellaneous
  2153.         0Fh file viewer
  2154.         10h disassembler
  2155. Return: AL = status
  2156.         00h already active
  2157.         FFh popped up successfully
  2158.     BX = 0000h
  2159. Note:    this function is only available if the extended API has been installed
  2160.       in the resident portion
  2161. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2162. --------U-2D--50-----------------------------
  2163. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET ADDRESS
  2164.     AL = 50h
  2165.     CX:DX = new address for start of memory view utility's display
  2166. Note:    this function is only available if the extended API has been installed
  2167.       in the resident portion
  2168. Return: AL = FFh if supported
  2169. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=21h,INT 2D/AL=51h
  2170. --------U-2D--51-----------------------------
  2171. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET REFERENCE
  2172.     AL = 51h
  2173.     BL = reference ("bookmark") number
  2174.     CX:DX = new address for reference
  2175. Return: AL = status
  2176.         00h invalid index
  2177.         FFh reference set
  2178. Note:    this function is only available if the extended API has been installed
  2179.       in the resident portion
  2180. Program: DTown Utilities is a shareware programmer's utility TSR by Jeroen van
  2181.       Disseldorp
  2182. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2183. --------b-2D--DC-----------------------------
  2184. INT 2D C - DAISY.SYS - BROADCAST: CHAIN RESCANNED
  2185.     AL = DCh
  2186.     AH = AMIS multiplex number for signature 'DAISYCHA' 'INDRIVER'
  2187.     DL = LPT Port Rescanned
  2188. Program: DAISY.SYS is a daisy chain manager for parallel port peripherals
  2189.       conforming to the IEEE 1284.3 Committee's daisy chain specification.
  2190. Desc:    This Broadcast is sent whenever daisy chain IDs are reassigned to
  2191.       warn parallel port device drivers that their daisy chain ID may
  2192.       have been changed.
  2193. Note:    This function is a callout from DAISY.SYS, NOT a call into DAISY.SYS
  2194. SeeAlso: INT 17/AX=0200h"Enhanced Parallel Port",#0530,#1905
  2195. --------l-2E---------------------------------
  2196. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  2197.     DS:SI -> commandline to execute (see #1920)
  2198. Return: all registers except CS:IP destroyed
  2199.     AX = status (4DOS v4.0)
  2200.        0000h successful
  2201.        FFFFh error before processing command (not enough memory, etc)
  2202.        other error number returned by command
  2203. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  2204.       internal commands) without loading another copy of COMMAND.COM
  2205.     if COMMAND.COM is the user's command interpreter, the primary copy
  2206.       executes the command; this allows the master environment to be
  2207.       modified by issuing a "SET" command, but changes in the master
  2208.       environment will not become effective until all programs descended
  2209.       from the primary COMMAND.COM terminate
  2210.     since COMMAND.COM processes the string as if typed from the keyboard,
  2211.       the transient portion needs to be present, and the calling program
  2212.       must ensure that sufficient memory to load the transient portion can
  2213.       be allocated by DOS if necessary
  2214.     results are unpredictable if invoked by a program run from a batch file
  2215.       because this call is not reentrant and COMMAND.COM uses the same
  2216.       internal variables when processing a batch file
  2217.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  2218.       has been loaded
  2219.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  2220.  
  2221. Format of DOS commandline:
  2222. Offset    Size    Description    (Table 1920)
  2223.  00h    BYTE    length of command string, not counting trailing CR
  2224.  01h    var    command string
  2225.   N    BYTE    0Dh (CR)
  2226. --------O-2E---------------------------------
  2227. INT 2E UP - Windows NT - NATIVE API
  2228.     EAX = function number
  2229.     EDX = address of parameter block
  2230. Return: ???
  2231. --------l-2E----BXE22E-----------------------
  2232. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  2233.     BX = E22Eh
  2234.     DS:SI -> zero byte
  2235. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  2236. ----------2F---------------------------------
  2237. INT 2F - Multiplex - NOTES
  2238.     AH = identifier of program which is to handle the interrupt
  2239.        00h-7Fh reserved for DOS
  2240.        B8h-BFh reserved for networks
  2241.        C0h-FFh reserved for applications
  2242.     AL is the function code
  2243.    This is a general mechanism for verifying the presence of a TSR and
  2244.    communicating with it.  When searching for a free identifier code for AH
  2245.    using the installation check (AL=00h), the calling program should set
  2246.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  2247.    and SS:SP to be valid on return, since numerous programs now use additional
  2248.    registers on input and/or output for the installation check.
  2249. Notes:    Since the multiplex chain is growing so long, and beginning to
  2250.       experience multiplex number collisions, I have proposed an alternate
  2251.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  2252.       multiplex, please let me know.
  2253.     DOS and some other programs return values in the flags register, so
  2254.       any TSR which chains by calling the previous handler rather than
  2255.       jumping to it should ensure that the returned flags are preserved
  2256.       and passed back to the original caller
  2257. SeeAlso: INT 2D"ALTERNATE MULTIPLEX"
  2258. --------t-2F---------------------------------
  2259. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  2260.     AH = xx (dynamically assigned based upon a search for a multiplex
  2261.          number which doesn't answer installed)
  2262.     AL = 00h installation check
  2263.     ES:DI = EBEBh:BEBEh
  2264. Return: AL = 00h not installed
  2265.          01h not installed, not OK to install
  2266.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  2267.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  2268.          short form of the manufacturer's name, PPPPPPPP is a product
  2269.          name and NNNN is the product's version number
  2270. --------t-2F---------------------------------
  2271. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  2272.     AH = programmer-selected multiplex number
  2273.     AL = function
  2274.         00h installation check
  2275.         Return: AL = FFh if installed
  2276.         01h get TSR interrupt vectors
  2277.         Return: DX:AX -> vector table (see #1921)
  2278.         02h get TSR code segment
  2279.         Return: AX = code segment for all interrupt handlers
  2280.         03h call user exit routine and release TSR's memory
  2281.         04h get signature string
  2282.         Return: DX:AX -> counted string containing signature
  2283.         05h get TSR's INT 2F handler
  2284.         Return: DX:AX -> INT 2F handler
  2285.         06h enable/disable TSR
  2286.         BL = new state (00h disabled, 01h enabled)
  2287.         07h activate TSR (popup if not disabled)
  2288.         08h get hotkeys
  2289.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2290.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  2291.         09h set hotkey
  2292.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2293.         CX = new hotkey (CH = keyflags, CL = scancode)
  2294.         0Ah-1Fh reserved
  2295. Index:    installation check;Ross Wentworth POPUP library
  2296. Index:    hotkeys;Ross Wentworth POPUP library
  2297.  
  2298. Format of POPUP vector table entry:
  2299. Offset    Size    Description    (Table 1921)
  2300.  00h    BYTE    vector number (00h = end of table)
  2301.  01h    DWORD    original vector
  2302.  05h    WORD    offset of interrupt handler in TSR's code segment
  2303. --------t-2F---------------------------------
  2304. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  2305.     AH = xx (dynamically assigned based upon a search for a multiplex
  2306.          number from C0h to FFh which doesn't answer installed)
  2307.     AL = 00h installation check
  2308.     ES:DI = 1492h:1992h
  2309. Return: AL = 00h not installed
  2310.          01h not installed, not OK to install
  2311.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  2312.            point to author_name_ver table (see #1922)
  2313.     AH = FFh
  2314. Note:    this interface permits advanced communication with TSRs: it is possible
  2315.       to make a generic uninstall utility, advanced TSR relocator programs
  2316.       in order to fit fragmented memory areas, etc.
  2317. See also: INT 2D"AMIS",INT 2F"Compuscience"
  2318. Index:    installation check;CiriSOFT TSR interface
  2319. Index:    uninstall;CiriSOFT TSR interface
  2320.  
  2321. Format of CiriSOFT author_name_ver table:
  2322. Offset    Size    Description    (Table 1922)
  2323.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  2324.           with PSP, XMS upper memory segment if installed as UMB...)
  2325.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  2326.           in *.COM programs and 0 in upper memory TSR's).
  2327.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  2328.           used by TSR is possible to determine if hooked vectors are
  2329.           still pointing it (and if it is safe to uninstall).
  2330.  -10    BYTE    characteristics byte (see #1923)
  2331.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  2332.           that the TSR must use THIS variable in it's INT 2Fh handler.
  2333.  -8    WORD    offset to vector_area table (see #1924)
  2334.  -6    WORD    offset to extra_area table (see #1925,#1923 [bit 7])
  2335.  -4   4 BYTEs    signature string "*##*"
  2336.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  2337.           is used in order to determine if the TSR is already resident
  2338.           and it's version code; the ':' char is used as delimiter)
  2339.  
  2340. Bitfields for CiriSOFT characteristics byte:
  2341. Bit(s)    Description    (Table 1923)
  2342.  0-2    type
  2343.     000 normal program (with PSP)
  2344.     001 upper XMS memory block (needed HIMEM.SYS function to free memory
  2345.           when uninstalling)
  2346.     010 device driver (*.SYS)
  2347.     011 device driver in EXE format
  2348.     1xx others (reserved)
  2349.  3-6    reserved
  2350.  7    set if extra_table defined and supported (see #1925)
  2351. SeeAlso: #1922
  2352.  
  2353. Format of CiriSOFT vector_area table:
  2354. Offset    Size    Description    (Table 1924)
  2355.  -1    BYTE    number of vectors intercepted by TSR
  2356.  00h    BYTE    first vector number
  2357.  01h    DWORD    first vector pointer before installing the TSR
  2358.  05h    BYTE    second vector number
  2359.  06h    DWORD    second vector pointer before installing the TSR
  2360.  0Ah    ...    (and so on)
  2361. Note:    the TSR must use these variables to invoke the previous interrupt
  2362.       handler routines
  2363. SeeAlso: #1922
  2364.  
  2365. Format of extra_area table (needed only to improve relocation feature):
  2366. Offset    Size    Description    (Table 1925)
  2367.  00h    WORD    offset to external_ctrl table (see #1926)
  2368.         0000h if not supported
  2369.  02h    WORD    reserved for future use (0)
  2370. SeeAlso: #1922
  2371.  
  2372. Format of CiriSOFT external_ctrl table:
  2373. Offset    Size    Description    (Table 1926)
  2374.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  2375.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  2376.  ---And if bit 0 in offset 00h is off:
  2377.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  2378.           /SR parameter (silent installation & inhibit)
  2379.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  2380.           from the previous TSR still resident
  2381.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  2382. --------c-2F00-------------------------------
  2383. INT 2F U - DOS 2.x only PRINT.COM - ???
  2384.     AH = 00h
  2385.     ???
  2386. Return: ???
  2387. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2388.     values in AH other than 00h or 01h cause PRINT to return the number of
  2389.       files in the queue in AH
  2390. SeeAlso: AH=01h
  2391. --------P-2F00-------------------------------
  2392. INT 2F U - PSPRINT - PRINT JOB CONTROL
  2393.     AH = 00h
  2394.     ???
  2395. Return: ???
  2396. --------c-2F0080-----------------------------
  2397. INT 2F - DOS 3.1+ PRINT - GIVE PRINT A TIME SLICE
  2398.     AX = 0080h
  2399. Return: after PRINT executes
  2400. Notes:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  2401.     this function is not supported by the Novell DOS 7 PRINT.COM
  2402. --------N-2F00D8-----------------------------
  2403. INT 2F - Personal NetWare - VLM - ???
  2404.     AX = 00D8h
  2405.     ???
  2406. Return: ???
  2407. Note:    hooked by one of the .VLMs loaded by VLM.EXE v1.10, but apparently a
  2408.       NOP
  2409. --------c-2F01-------------------------------
  2410. INT 2F U - DOS 2.x only PRINT.COM - ???
  2411.     AH = 01h
  2412.     ???
  2413. Return: ???
  2414. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2415.     values in AH other than 00h or 01h cause PRINT to return the number of
  2416.       files in the queue in AH
  2417. SeeAlso: AH=00h
  2418. --------c-2F0100-----------------------------
  2419. INT 2F - DOS 3.0+ PRINT - INSTALLATION CHECK
  2420.     AX = 0100h
  2421. Return: AL = status
  2422.         00h not installed
  2423.         01h not installed, but not OK to install
  2424.         FFh installed
  2425.         AH = 00h (Novell DOS 7)
  2426. SeeAlso: AX=0101h
  2427. --------c-2F0100SI20D6-----------------------
  2428. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  2429.     AX = 0100h
  2430.     SI = 20D6h
  2431.     DI = 8761h
  2432. Return: AX = 00FFh if installed
  2433.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  2434.         SI = resident code segment
  2435. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  2436.       LaserTools' PrintCache memory/disk-based print spooler package
  2437. Note:    if either of SI or DI differ from the indicated magic values, only AX
  2438.       will be modified on return, for compatibility with DOS PRINT
  2439. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  2440. --------c-2F0101-----------------------------
  2441. INT 2F - DOS 3.0+ PRINT - SUBMIT FILE FOR PRINTING
  2442.     AX = 0101h
  2443.     DS:DX -> submit packet (see #1927)
  2444. Return: CF clear if successful
  2445.         AL = status
  2446.         01h added to queue
  2447.         9Eh now printing
  2448.     CF set on error
  2449.         AX = error code (see #1928,#1020 at INT 21/AH=59h/BX=0000h)
  2450. SeeAlso: AX=0102h
  2451.  
  2452. Format of PRINT submit packet:
  2453. Offset    Size    Description    (Table 1927)
  2454.  00h    BYTE    level (must be 00h)
  2455.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  2456.  
  2457. (Table 1928)
  2458. Values for PRINT error code:
  2459.  0001h    invalid function
  2460.  0002h    file not found
  2461.  0003h    path not found
  2462.  0004h    out of file handles
  2463.  0005h    access denied
  2464.  0008h    print queue full
  2465.  0009h    spooler busy
  2466.  000Ch    name too long
  2467.  000Fh    invalid drive
  2468. --------c-2F0101SI20D6-----------------------
  2469. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  2470.     AX = 0101h
  2471.     SI = 20D6h
  2472.     DI = 8761h
  2473.     DS:DX -> submit packet (see #1927)
  2474.     CL = print options
  2475.         bit 4: use default options
  2476. Return: CF clear if successful
  2477.         AL = status
  2478.         01h added to queue
  2479.         9Eh now printing
  2480.     CF set on error
  2481.         AX = error code (see #1928)
  2482. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  2483.       LaserTools' PrintCache memory/disk-based print spooler package
  2484. Note:    if either SI or DI differs from the indicated magic values on entry,
  2485.       PrintCache will use the default print options for the file for
  2486.       compatibility with DOS PRINT
  2487. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AX=0107h"PrintCache"
  2488. --------c-2F0102-----------------------------
  2489. INT 2F - DOS 3.0+ PRINT - REMOVE FILE FROM PRINT QUEUE
  2490.     AX = 0102h
  2491.     DS:DX -> ASCIZ filename (wildcards allowed)
  2492. Return: CF clear if successful
  2493.     CF set on error
  2494.         AX = error code (see #1928)
  2495. SeeAlso: AX=0101h,AX=0103h
  2496. --------c-2F0103-----------------------------
  2497. INT 2F - DOS 3.0+ PRINT - CANCEL ALL FILES IN PRINT QUEUE
  2498.     AX = 0103h
  2499. Return: CF clear if successful
  2500.     CF set on error
  2501.         AX = error code (see #1928)
  2502. SeeAlso: AX=0102h
  2503. --------c-2F0104-----------------------------
  2504. INT 2F - DOS 3.0+ PRINT - FREEZE PRINT QUEUE TO READ JOB STATUS
  2505.     AX = 0104h
  2506. Return: CF clear if successful
  2507.         DX = error count since status last read
  2508.         DS:SI -> print queue
  2509.     CF set on error
  2510.         AX = error code (see #1928)
  2511. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  2512.       to avoid changing the list while it is being examined
  2513. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  2514.       an empty filename; the first name is the file currently being printed
  2515.     printing is stopped until AX=0105h is called to prevent the queue
  2516.       from changing while the filenames are being read
  2517. SeeAlso: AX=0101h,AX=0105h
  2518. --------c-2F0105-----------------------------
  2519. INT 2F - DOS 3.0+ PRINT - RESTART PRINT QUEUE AFTER STATUS READ
  2520.     AX = 0105h
  2521. Return: CF clear if successful
  2522.     CF set on error
  2523.         AX = error code (see #1928)
  2524. Desc:    restart PRINT's activities once an application finishes examining the
  2525.       print queue
  2526. SeeAlso: AX=0104h
  2527. --------c-2F0106-----------------------------
  2528. INT 2F - DOS 3.3+ PRINT - GET PRINTER DEVICE
  2529.     AX = 0106h
  2530. Return: CF set if files in print queue
  2531.         AX = error code 0008h (queue full)
  2532.         DS:SI -> device driver header (see #0987)
  2533.     CF clear if print queue empty
  2534.         AX = 0000h
  2535. Desc:    determine which device, if any, PRINT is currently using for output
  2536. Notes:    undocumented prior to the release of MS-DOS 5.0
  2537.     this function can be used to allow a program to avoid printing to the
  2538.       printer on which PRINT is currently performing output
  2539. SeeAlso: AX=0104h
  2540. --------c-2F0107-----------------------------
  2541. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  2542.     AX = 0107h
  2543.     CL bit 0: output form feed between print jobs
  2544. Return: AL destroyed
  2545. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  2546. --------N-2F0200-----------------------------
  2547. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  2548.     AX = 0200h
  2549. Return: AL = FFh if installed
  2550. Desc:    determine whether the PC LAN Program redirector is installed
  2551. SeeAlso: AX=0201h,AX=0203h
  2552. --------N-2F0201-----------------------------
  2553. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2554.     AX = 0201h
  2555. Return: nothing???
  2556. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2557.     AX=0202h appears to be the opposite function
  2558.     these functions are supposedly used to signal opening and closing of
  2559.       printers
  2560. SeeAlso: AX=0202h
  2561. --------N-2F0202-----------------------------
  2562. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2563.     AX = 0202h
  2564.     ???
  2565. Return: nothing???
  2566. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2567.     these functions are supposedly used to signal opening and closing of
  2568.       printers
  2569. SeeAlso: AX=0201h
  2570. --------N-2F0203-----------------------------
  2571. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2572.     AX = 0203h
  2573. Return: nothing???
  2574. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2575.     AX=0204h appears to be the opposite function
  2576.     these functions are supposedly used to signal opening and closing of
  2577.       printers
  2578. SeeAlso: AX=0200h,AX=0204h
  2579. --------N-2F0204-----------------------------
  2580. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2581.     AX = 0204h
  2582.     ???
  2583. Return: nothing???
  2584. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2585.     AX=0203h appears to be the opposite function
  2586.     these functions are supposedly used to signal opening and closing of
  2587.       printers
  2588. SeeAlso: AX=0200h,AX=0203h
  2589. --------N-2F---------------------------------
  2590. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2591.     AX = 02xxh
  2592.     ???
  2593. Return: ???
  2594. --------l-2F0500-----------------------------
  2595. INT 2F U - DOS 3.0+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  2596.     AX = 0500h
  2597. Return: AL = 00h not installed, OK to install
  2598.          01h not installed, can't install
  2599.          FFh installed
  2600. Desc:    determine whether a critical error message override is installed
  2601. Note:    this set of functions allows a user program to partially or completely
  2602.       override the default critical error handler's message in COMMAND.COM
  2603. SeeAlso: AH=05h,INT 24
  2604. --------l-2F05-------------------------------
  2605. INT 2F CU - DOS 3.0+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  2606.     AH = 05h
  2607. ---DOS 3.x---
  2608.     AL = extended error code (not zero)
  2609. ---DOS 4.0+ ---
  2610.     AL = error type
  2611.         01h DOS extended error code
  2612.         02h parameter error
  2613.     BX = error code
  2614. Return: CF clear if successful
  2615.         ES:DI -> ASCIZ error message (read-only)
  2616.         AL = completion state
  2617.         00h message requires completion with device name, drive, etc.
  2618.         01h message is complete as returned
  2619.     CF set if error code can't be converted to string
  2620.         AX,DI,ES destroyed
  2621.     other flags corrupted
  2622. Notes:    called at start of COMMAND.COM's default critical error handler if
  2623.       installed by a user program, allowing partial or complete overriding
  2624.       of the default error messages
  2625.     subfunction 02h is called by many DOS 4 external programs
  2626.     DR DOS's COMMAND.COM appends additional info ("0 files copied") to the
  2627.       returned string
  2628. SeeAlso: AX=0500h,AX=122Eh,INT 24
  2629. --------U-2F0600-----------------------------
  2630. INT 2F - DOS 3.0+ ASSIGN - INSTALLATION CHECK
  2631.     AX = 0600h
  2632. Return: AL = status
  2633.         00h not installed
  2634.         01h not installed, but not OK to install
  2635.         FFh installed
  2636. Notes:    ASSIGN is not a TSR in DR DOS 5.0; it is internally replaced by SUBST
  2637.       (see INT 21/AH=52h)
  2638.     undocumented prior to the release of DOS 5.0
  2639. SeeAlso: AX=0601h,INT 21/AH=52h
  2640. --------U-2F0601-----------------------------
  2641. INT 2F U - DOS 3.0+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  2642.     AX = 0601h
  2643. Return: ES = segment of ASSIGN work area and assignment table
  2644. Note:    the 26 bytes starting at ES:0103h specify which drive each of A: to Z:
  2645.       is mapped to.     Initially set to 01h 02h 03h....
  2646. SeeAlso: AX=0600h,AX=AF14h"WinDOS"
  2647. --------D-2F0800-----------------------------
  2648. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  2649.     AX = 0800h
  2650. Return: AL = status
  2651.         00h not installed, OK to install
  2652.         01h not installed, not OK to install
  2653.         FFh installed
  2654. Desc:    determine whether the internal support code used by DRIVER.SYS is
  2655.       present; it is always present in DOS 3.2+
  2656. Note:    supported by DR DOS 5.0 and Novell DOS 7
  2657. --------D-2F0801-----------------------------
  2658. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  2659.     AX = 0801h
  2660.     DS:DI -> drive data table (see #1935,#1936,#1937)
  2661. Return: AX,BX,SI,ES destroyed
  2662. Notes:    moves down internal list of drive data tables, copying and modifying
  2663.       the drive description flags word for tables referencing same physical
  2664.       drive
  2665.     the data table is appended to the chain of tables
  2666.     supported by DR DOS 5.0 and Novell DOS 7
  2667. SeeAlso: AX=0803h
  2668. --------D-2F0802-----------------------------
  2669. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  2670.     AX = 0802h
  2671.     ES:BX -> device driver request header (see #1931)
  2672. Return: request header updated as per requested operation
  2673.     STACK:    WORD    original flags from INT call (left by RETF in device
  2674.               driver, at least in DOS 5.0-6.22)
  2675. Notes:    supported by DR DOS 5.0
  2676.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  2677.       DOS 4.0+ executes this function on AL=02h and AL=04h-F7h
  2678.     the command codes (see #1929) and structures described below apply
  2679.       to all drivers which support the appropriate commands; this call is
  2680.       just one of a number of ways in which a device driver request may
  2681.       be invoked
  2682.     supported by Novell DOS 7
  2683. SeeAlso: AX=0800h,AX=0801h,AX=0803h,AX=1510h,INT 21/AH=52h,INT 21/AH=99h
  2684. SeeAlso: INT 21/AH=9Ah
  2685.  
  2686. (Table 1929)
  2687. Values for device driver command code:
  2688.  00h    INIT
  2689.  01h    MEDIA CHECK (block devices)
  2690.  02h    BUILD BPB (block devices)
  2691.  03h    IOCTL INPUT
  2692.  04h    INPUT
  2693.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  2694.  06h    INPUT STATUS (character devices)
  2695.  07h    INPUT FLUSH (character devices)
  2696.  08h    OUTPUT
  2697.  09h    OUTPUT WITH VERIFY
  2698.  0Ah    OUTPUT STATUS (character devices)
  2699.  0Bh    OUTPUT FLUSH (character devices)
  2700.  0Ch    IOCTL OUTPUT
  2701.  0Dh    (DOS 3.0+) DEVICE OPEN
  2702.  0Eh    (DOS 3.0+) DEVICE CLOSE
  2703.  0Fh    (DOS 3.0+) REMOVABLE MEDIA (block devices)
  2704.  10h    (DOS 3.0+) OUTPUT UNTIL BUSY (character devices)
  2705.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  2706.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  2707.  13h    (DOS 3.2+) GENERIC IOCTL
  2708.  14h    unused
  2709.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  2710.  16h    unused
  2711.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  2712.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  2713.  19h    (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
  2714.  80h    (CD-ROM) READ LONG
  2715.  81h    (CD-ROM) reserved
  2716.  82h    (CD-ROM) READ LONG PREFETCH
  2717.  83h    (CD-ROM) SEEK
  2718.  84h    (CD-ROM) PLAY AUDIO
  2719.  85h    (CD-ROM) STOP AUDIO
  2720.  86h    (CD-ROM) WRITE LONG
  2721.  87h    (CD-ROM) WRITE LONG VERIFY
  2722.  88h    (CD-ROM) RESUME AUDIO
  2723.  
  2724. Bitfields for device request status:
  2725. Bit(s)    Description    (Table 1930)
  2726.  15    error
  2727.  14-11    reserved
  2728.  10    ??? set by DOS kernel on entry to some driver calls
  2729.  9    busy
  2730.  8    done (may be clear on return under European MS-DOS 4.0)
  2731.  7-0    error code if bit 15 set (see #1932)
  2732.  
  2733. Format of device driver request header:
  2734. Offset    Size    Description    (Table 1931)
  2735.  00h    BYTE    length of request header
  2736.  01h    BYTE    subunit within device driver
  2737.  02h    BYTE    command code (see #1929)
  2738.  03h    WORD    status (filled in by device driver) (see #1930)
  2739. ---DOS---
  2740.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  2741.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  2742.               device's request queue
  2743.         (other versions) reserved (unused in DOS 2.x and 3.x)
  2744. ---STARLITE architecture---
  2745.  05h    DWORD    pointer to next request header
  2746.  09h  4 BYTEs    reserved
  2747. ---command code 00h---
  2748.  0Dh    BYTE    (ret) number of units
  2749.  0Eh    DWORD    (call) pointer to DOS device helper function (see #1933)
  2750.               (European MS-DOS 4.0 only)
  2751.         (call) pointer past end of memory available to driver (DOS 5+)
  2752.         (ret) address of first free byte following driver
  2753.  12h    DWORD    (call) pointer to commandline arguments
  2754.         (ret) pointer to BPB array (block drivers) or
  2755.               0000h:0000h (character drivers)
  2756.  16h    BYTE    (DOS 3.0+) drive number for first unit of block driver (0=A)
  2757.    ---European MS-DOS 4.0---
  2758.  17h    DWORD    pointer to function to save registers on stack
  2759.    ---DOS 5+ ---
  2760.  17h    WORD    (ret) error-message flag
  2761.         0001h MS-DOS should display error msg on init failure
  2762. ---command code 01h---
  2763.  0Dh    BYTE    media descriptor
  2764.  0Eh    BYTE    (ret) media status
  2765.         00h don't know
  2766.         01h media has not changed
  2767.         FFh media has been changed
  2768.  0Fh    DWORD    (ret, DOS 3.0+) pointer to previous volume ID if the
  2769.           OPEN/CLOSE/RM bit in device header is set and disk changed
  2770. ---command code 02h---
  2771.  0Dh    BYTE    media descriptor
  2772.  0Eh    DWORD    transfer address
  2773.         -> scratch sector if NON-IBM FORMAT bit in device header set
  2774.         -> first FAT sector otherwise
  2775.  12h    DWORD    pointer to BPB (set by driver) (see #1004 at INT 21/AH=53h)
  2776. ---command codes 03h,0Ch---
  2777.           (see also INT 21/AX=4402h"DOS 2+",INT 21/AX=4403h"DOS")
  2778.  0Dh    BYTE    media descriptor (block devices only)
  2779.  0Eh    DWORD    transfer address
  2780.  12h    WORD    (call) number of bytes to read/write
  2781.         (ret) actual number of bytes read or written
  2782. ---command codes 04h,08h,09h (except Compaq DOS 3.31, DR DOS 6)---
  2783.  0Dh    BYTE    media descriptor (block devices only)
  2784.  0Eh    DWORD    transfer address
  2785.  12h    WORD    byte count (character devices) or sector count (block devices)
  2786.  14h    WORD    starting sector number (block devices only)
  2787.  16h    DWORD    (DOS 3.0+) pointer to volume ID if error 0Fh returned
  2788.  1Ah    DWORD    (DOS 4.0+) 32-bit starting sector number (block devices with
  2789.           device attribute word bit 1 set only) if starting sector
  2790.           number above is FFFFh (see INT 21/AH=52h)
  2791. ---command codes 04h,08h,09h (Compaq DOS 3.31, DR DOS 6)---
  2792.  0Dh    BYTE    media descriptor (block devices only)
  2793.  0Eh    DWORD    transfer address
  2794.  12h    WORD    byte count (character devices) or sector count (block devices)
  2795.  14h    DWORD    32-bit starting sector number (block devices only)
  2796.     Note:    to reliably determine which variant of the request block for
  2797.           functions 04h,08h,09h has been passed to the driver, check
  2798.           the length field as well as the word at offset 14h.  If the
  2799.           length is 1Eh and 14h=FFFFh, use the DWORD at 1Ah as the
  2800.           starting sector number; if the length is 18h, use the DWORD
  2801.           at 14h; otherwise, use the WORD at 14h.
  2802. ---command code 05h---
  2803.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  2804. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  2805.  no further fields
  2806. ---command code 10h---
  2807.  0Dh    BYTE    unused
  2808.  0Eh    DWORD    transfer address
  2809.  12h    WORD    (call) number of bytes to write
  2810.         (ret) actual number of bytes written
  2811. ---command codes 11h,12h---
  2812.  0Dh    BYTE    reserved
  2813. ---command code 15h---
  2814.  no further fields
  2815. ---command codes 13h,19h---
  2816.  0Dh    BYTE    category code
  2817.         00h unknown
  2818.         01h COMn:
  2819.         03h CON
  2820.         05h LPTn:
  2821.         07h mouse (European MS-DOS 4.0)
  2822.         08h disk
  2823.         9Eh (STARLITE) Media Access Control driver
  2824.  0Eh    BYTE    function code
  2825.         00h (STARLITE) MAC Bind request
  2826.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  2827.         SI contents (European MS-DOS 4.0)
  2828.  11h    WORD    offset of device driver header (see #0987)
  2829.         DI contents (European MS-DOS 4.0)
  2830.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  2831. ---command codes 80h,82h---
  2832.  0Dh    BYTE    addressing mode
  2833.         00h HSG (default)
  2834.         01h Phillips/Sony Red Book
  2835.  0Eh    DWORD    transfer address (ignored for command 82h)
  2836.  12h    WORD    number of sectors to read
  2837.         (if 0 for command 82h, request is an advisory seek)
  2838.  14h    DWORD    starting sector number
  2839.         logical sector number in HSG mode
  2840.         frame/second/minute/unused in Red Book mode
  2841.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  2842.  18h    BYTE    data read mode
  2843.         00h cooked (2048 bytes per frame)
  2844.         01h raw (2352 bytes per frame, including EDC/ECC)
  2845.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2846.  1Ah    BYTE    interleave skip factor
  2847.         (number of sectors between consecutive portions)
  2848. ---command code 83h---
  2849.  0Dh    BYTE    addressing mode
  2850.         00h HSG (default)
  2851.         01h Phillips/Sony Red Book
  2852.  0Eh    DWORD    transfer address (ignored)
  2853.  12h    WORD    number of sectors to read (ignored)
  2854.  14h    DWORD    starting sector number (see also above)
  2855. ---command code 84h---
  2856.  0Dh    BYTE    addressing mode
  2857.         00h HSG (default)
  2858.         01h Phillips/Sony Red Book
  2859.  0Eh    DWORD    starting sector number (see also above)
  2860.  12h    DWORD    number of sectors to play
  2861. ---command codes 85h,88h---
  2862.  no further fields
  2863. ---command codes 86h,87h---
  2864.  0Dh    BYTE    addressing mode
  2865.         00h HSG (default)
  2866.         01h Phillips/Sony Red Book
  2867.  0Eh    DWORD    transfer address (ignored in write mode 0)
  2868.  12h    WORD    number of sectors to write
  2869.  14h    DWORD    starting sector number (also see above)
  2870.  18h    BYTE    write mode
  2871.         00h mode 0 (write all zeros)
  2872.         01h mode 1 (default) (2048 bytes per sector)
  2873.         02h mode 2 form 1 (2048 bytes per sector)
  2874.         03h mode 2 form 2 (2336 bytes per sector)
  2875.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2876.  1Ah    BYTE    interleave skip factor
  2877.         (number of sectors between consecutive portions)
  2878.  
  2879. (Table 1932)
  2880. Values for device driver error code:
  2881.  00h    write-protect violation
  2882.  01h    unknown unit
  2883.  02h    drive not ready
  2884.  03h    unknown command
  2885.  04h    CRC error
  2886.  05h    bad drive request structure length
  2887.  06h    seek error
  2888.  07h    unknown media
  2889.  08h    sector not found
  2890.  09h    printer out of paper
  2891.  0Ah    write fault
  2892.  0Bh    read fault
  2893.  0Ch    general failure
  2894.  0Dh    reserved
  2895.  0Eh    (CD-ROM) media unavailable
  2896.  0Fh    invalid disk change
  2897.  
  2898. (Table 1933)
  2899. Call European MS-DOS 4.0 device helper function with:
  2900.     DL = function
  2901.         00h "SchedClock" called on each timer tick
  2902.         AL = tick interval in milliseconds
  2903.         01h "DevDone" device I/O complete
  2904.         ES:BX -> request header
  2905.         Note:    must update status word first; may be called from
  2906.               an interrupt handler
  2907.         02h "PullRequest" pull next request from queue
  2908.         DS:SI -> DWORD pointer to start of device's request queue
  2909.         Return: ZF clear if pending request
  2910.                 ES:BX -> request header
  2911.             ZF set if no more requests
  2912.         03h "PullParticular" remove specific request from queue
  2913.         DS:SI -> DWORD pointer to start of device's request queue
  2914.         ES:BX -> request header
  2915.         Return: ZF set if request header not found
  2916.         04h "PushRequest" push the request onto the queue
  2917.         DS:SI -> DWORD pointer to start of device's request queue
  2918.         ES:BX -> request header
  2919.         interrupts disabled
  2920.         05h "ConsInputFilter" keyboard input check
  2921.         AX = character (high byte 00h if PC ASCII character)
  2922.         Return: ZF set if character should be discarded
  2923.             ZF clear if character should be handled normally
  2924.         Note:    called by keyboard interrupt handler so DOS can scan
  2925.               for special input characters
  2926.         06h "SortRequest" push request in sorted order by starting sector
  2927.         DS:SI -> DWORD pointer to start of device's request queue
  2928.         ES:BX -> request header
  2929.         interrupts disabled
  2930.         07h "SigEvent" send signal on keyboard event
  2931.         AH = event identifier
  2932.         Return: AL,FLAGS destroyed
  2933.         09h "ProcBlock" block on event
  2934.         AX:BX = event identifier (typically a pointer)
  2935.         CX = timeout in ms or 0000h for never
  2936.         DH = interruptable flag (nonzero if pause may be interrupted)
  2937.         interrupts disabled
  2938.         Return: after corresponding ProcRun call
  2939.             CF clear if event wakeup, set if unusual wakeup
  2940.             ZF set if timeout wakeup, clear if interrupted
  2941.             AL = wakeup code, nonzero if unusual wakeup
  2942.             interrupts enabled
  2943.             BX,CX,DX destroyed
  2944.         Note:    block process and schedules another to run
  2945.         0Ah "ProcRun" unblock process
  2946.         AX:BX = event identifier (typically a pointer)
  2947.         Return: AX = number of processes awakened
  2948.             ZF set if no processes awakened
  2949.             BX,CX,DX destroyed
  2950.         0Bh "QueueInit" initialize/clear character queue
  2951.         DS:BX -> character queue structure (see #1934)
  2952.         Note:    the queue size field must be set before calling
  2953.         0Dh "QueueWrite" put a character in the queue
  2954.         DS:BX -> character queue (see #1934)
  2955.         AL = character to append to end of queue
  2956.         Return: ZF set if queue is full
  2957.             ZF clear if character stored
  2958.         0Eh "QueueRead" get a character from the queue
  2959.         DS:BX -> character queue (see #1934)
  2960.         Return: ZF set if queue is empty
  2961.             ZF clear if characters in queue
  2962.                 AL = first character in queue
  2963.         10h "GetDOSVar" return pointer to DOS variable
  2964.         AL = index of variable
  2965.             03h current process ID
  2966.         BX = index into variable if AL specifies an array
  2967.         CX = expected length of variable
  2968.         Return: CF clear if successful
  2969.                 DX:AX -> variable
  2970.             CF set on error
  2971.                 AX,DX destroyed
  2972.             BX,CX destroyed
  2973.         Note:    the variables may not be modified
  2974.         14h "Yield" yield CPU if higher-priority task ready to run
  2975.         Return: FLAGS destroyed
  2976.         1Bh "CritEnter" begin system critical section
  2977.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2978.         Return: AX,BX,CX,DX destroyed
  2979.         1Ch "CritLeave" end system critical section
  2980.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2981.         Return: AX,BX,CX,DX destroyed
  2982.         Note:    must be called in the context of the process which
  2983.               called CritEnter on the semaphore
  2984. Note:    the DWORD pointing at the request queue must be allocated by the driver
  2985.       and initialized to 0000h:0000h.  It always points at the next request
  2986.       to be executed
  2987.  
  2988. Format of European MS-DOS 4.0 character queue:
  2989. Offset    Size    Description    (Table 1934)
  2990.  00h    WORD    size of queue in bytes
  2991.  02h    WORD    index of next character out
  2992.  04h    WORD    count of characters in the queue
  2993.  06h  N BYTEs    queue buffer
  2994. --------D-2F0803-----------------------------
  2995. INT 2F U - DOS 4.0+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  2996.     AX = 0803h
  2997. Return: DS:DI -> first drive data table in list (see #1935,#1936,#1937)
  2998. Note:    not available under DR DOS 5.0, but supported by Novell DOS 7 (using
  2999.       the MS-DOS 4+ data table format)
  3000. SeeAlso: AX=0801h
  3001.  
  3002. Format of DOS 3.30 drive data table:
  3003. Offset    Size    Description    (Table 1935)
  3004.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3005.  04h    BYTE    physical unit number (for INT 13)
  3006.  05h    BYTE    logical drive number (0=A:)
  3007.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3008.         Offset    Size    Description
  3009.          00h    WORD    bytes per sector
  3010.          02h    BYTE    sectors per cluster, FFh if unknown
  3011.          03h    WORD    number of reserved sectors
  3012.          05h    BYTE    number of FATs
  3013.          06h    WORD    number of root dir entries
  3014.          08h    WORD    total sectors
  3015.          0Ah    BYTE    media descriptor, 00h if unknown
  3016.          0Bh    WORD    sectors per FAT
  3017.          0Dh    WORD    sectors per track
  3018.          0Fh    WORD    number of heads
  3019.          11h    WORD    number of hidden sectors
  3020.  19h    BYTE    flags
  3021.         bit 6: 16-bit FAT instead of 12-bit FAT
  3022.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  3023.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3024.           fixed media)
  3025.  27h    BYTE    terminating null for volume label???
  3026.  28h    BYTE    device type (see #0903 at INT 21/AX=440Dh"DOS 3.2+")
  3027.  29h    WORD    bit flags describing drive (see #1938)
  3028.  2Bh    WORD    number of cylinders
  3029.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  3030.  40h  3 BYTEs    ???
  3031.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  3032.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  3033.           media and PC-DOS 3.30)
  3034.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  3035. ---removable media---
  3036.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3037. ---fixed media---
  3038.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  3039.  4Fh    WORD    absolute cylinder number of partition's start on physical
  3040.           drive (always FFFFh if primary partition)
  3041. SeeAlso: #1936,#1937
  3042.  
  3043. Format of COMPAQ DOS 3.31 drive data table:
  3044. Offset    Size    Description    (Table 1936)
  3045.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3046.  04h    BYTE    physical unit number (for INT 13)
  3047.  05h    BYTE    logical drive number (0=A:)
  3048.  06h 25 BYTEs    BIOS Parameter Block (see #1937)
  3049.  1Fh  6 BYTEs    reserved fields from BPB above???
  3050.  25h    BYTE    flags
  3051.         bit 6: 16-bit FAT instead of 12-bit FAT
  3052.         bit 5: large volume???
  3053.  26h    WORD    device-open count???
  3054.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3055.           fixed media)
  3056.  33h    BYTE    terminating null for volume label
  3057.  34h    BYTE    device type (see #0903 at INT 21/AX=440Dh"DOS 3.2+")
  3058.  35h    WORD    bit flags describing drive (see #1938)
  3059.  37h    WORD    number of cylinders
  3060.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  3061.  52h  6 BYTEs    ??? apparently always zeros
  3062.  58h    BYTE    least-significant byte of last-accessed cylinder number
  3063. ---removable media---
  3064.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3065. ---fixed media---
  3066.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  3067.  5Bh    WORD    absolute cylinder number of partition's start on physical
  3068.           drive (always FFFFh if primary partition)
  3069. SeeAlso: #1935,#1937
  3070.  
  3071. Format of DOS 4.0-7.0 drive data table:
  3072. Offset    Size    Description    (Table 1937)
  3073.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3074.  04h    BYTE    physical unit number (for INT 13)
  3075.  05h    BYTE    logical drive number (0=A:)
  3076.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3077.         Offset    Size    Description
  3078.          00h    WORD    bytes per sector
  3079.          02h    BYTE    sectors per cluster, FFh if unknown
  3080.          03h    WORD    number of reserved sectors
  3081.          05h    BYTE    number of FATs
  3082.          06h    WORD    number of root dir entries
  3083.          08h    WORD    total sectors (refer to offset 15h if zero)
  3084.          0Ah    BYTE    media descriptor, 00h if unknown
  3085.          0Bh    WORD    sectors per FAT
  3086.          0Dh    WORD    sectors per track
  3087.          0Fh    WORD    number of heads
  3088.          11h    DWORD    number of hidden sectors
  3089.          15h    DWORD    total sectors if WORD at 08h is zero
  3090.  1Fh    BYTE    flags
  3091.         bit 6: 16-bit FAT instead of 12-bit
  3092.         bit 7: unsupportable disk (all accesses will return Not Ready)
  3093.  20h    WORD    device-open count
  3094.  22h    BYTE    device type (see #0903 at INT 21/AX=440Dh"DOS 3.2+")
  3095.  23h    WORD    bit flags describing drive (see #1938)
  3096.  25h    WORD    number of cylinders (for partition only, if hard disk)
  3097.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  3098.  40h  6 BYTEs    reserved (part of BPB above)
  3099.  46h    BYTE    last track accessed
  3100. ---removable media---
  3101.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3102. ---fixed media---
  3103.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  3104.         always 0001h for DOS 5+
  3105.  49h    WORD    absolute cylinder number of partition's start on physical drive
  3106.         (FFFFh if primary partition in DOS 4.x)
  3107. ------
  3108.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  3109.           extended boot record rather than root directory)
  3110.  56h    BYTE    terminating null for volume label
  3111.  57h    DWORD    serial number
  3112.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  3113.  63h    BYTE    terminating null for filesystem type
  3114. SeeAlso: #1935,#1936
  3115.  
  3116. Bitfields for flags describing drive:
  3117. Bit(s)    Description    (Table 1938)
  3118.  0    fixed media
  3119.  1    door lock ("changeline") supported
  3120.  2    current BPB locked
  3121.  3    all sectors in a track are the same size
  3122.  4    physical drive has multiple logical units
  3123.  5    current logical drive for shared physical drive
  3124.  6    disk change detected
  3125.  7    device parameters were changed (set DASD before formatting)
  3126.     (see #0902 at INT 21/AX=440Dh"DOS 3.2+")
  3127.  8    disk reformatted (BPB of current media was changed)
  3128.  9    access flag (fixed media only, disables reads and writes)
  3129.     (see #0908 at INT 21/AX=440Dh"DOS 3.2+")
  3130. --------f-2F1000-----------------------------
  3131. INT 2F - SHARE - INSTALLATION CHECK
  3132.     AX = 1000h
  3133. Return: AL = status
  3134.         00h not installed, OK to install
  3135.         01h not installed, not OK to install
  3136.         FFh installed
  3137. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  3138.       (08E9: OR  AL,AL
  3139.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  3140.     values of AL other than described here put PC-DOS 4.00 into the same
  3141.       loop (the buggy instructions are the same)
  3142. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3143.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  3144.       inactive state (due to the undocumented /NC flag used by the autoload
  3145.       code) until this call is made
  3146.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  3147.     Windows Enhanced mode hooks this call and reports that SHARE is
  3148.       installed even when it is not
  3149. SeeAlso: AX=1080h,INT 21/AH=52h
  3150. --------d-2F1001-----------------------------
  3151. INT 2F U - DR DOS 6.0 SHARE internal - SET ???
  3152.     AX = 1001h
  3153.     DX:BX -> ???function
  3154. Notes:    this function is also supported by SuperStor, a disk-compression
  3155.       program by Addstor which is bundled with DR DOS 6.0, and the
  3156.       Novell DOS 7 DELWATCH.EXE
  3157.     the default handler for the pointer set by this call under DELWATCH
  3158.       simply returns with CF set
  3159. SeeAlso: AX=1000h,AX=F800h
  3160. --------f-2F1040-----------------------------
  3161. INT 2F U - DOS 4 only SHARE internal - ???
  3162.     AX = 1040h
  3163.     ???
  3164. Return: AL = FFh???
  3165. SeeAlso: AX=1000h
  3166. --------f-2F1080-----------------------------
  3167. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  3168.     AX = 1080h
  3169. Return: AL = status
  3170.         F0h successful
  3171.         FFh checking was already on
  3172. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  3173.       and file sharing checks.  The undocumented commandline flag /NC can
  3174.       be used to disable the sharing code.
  3175. SeeAlso: AX=1000h,AX=1081h
  3176. --------f-2F1081-----------------------------
  3177. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  3178.     AX = 1081h
  3179. Return: AL = status
  3180.         F0h successful
  3181.         FFh checking was already off
  3182. Note:    (see AX=1080h)
  3183. SeeAlso: AX=1000h,AX=1080h
  3184. --------O-2F10FE-----------------------------
  3185. INT 2F U - Novell DOS 7 DELWATCH.EXE - INSTALLATION CHECK
  3186.     AX = 10FEh
  3187. Return: AX = 20FFh if installed and active
  3188.         DX:BX -> private entry point (see #1939)
  3189.  
  3190. (Table 1939)
  3191. Call DELWATCH private entry point with:
  3192.     AH = function
  3193.         00h NOP???
  3194.         Return: AX = 0000h
  3195.             CX = 0004h (unsupported function)
  3196.         01h disable DELWATCH on drive
  3197.         AL = drive number (00h = A:)
  3198.         Return: AX = status (0000h if failed, FFFFh if successful)
  3199.         02h ???
  3200.         AL = drive number (00h = A:)
  3201.         ???
  3202.         Return: ???
  3203.         03h    ???
  3204.         AL = drive number (00h = A:)
  3205.         CX = ??? (0000h/0001h)
  3206.         ???
  3207.         Return: ???
  3208.         04h ???
  3209.         AL = drive number (00h = A:)
  3210.         ???
  3211.         Return: ???
  3212.         05h ???
  3213.         AL = drive number (00h = A:)
  3214.         ???
  3215.         Return: ???
  3216.         06h enable DELWATCH on drive
  3217.         AL = drive number with bit 7 set (80h = A:, etc.)
  3218.         BX = maximum files of same name in one directory to save
  3219.         CX = maximum files to save on this disk
  3220.         ???
  3221.         Return: AX = status
  3222.                 0000h failed
  3223.                 FFFFh successful
  3224.             CX = error code on failure
  3225.                 (0004h if AL < 80h on entry)
  3226.         07h ???
  3227.         08h set file extensions list
  3228.         AL = sense (00h exclude named extensions, 01h only named ext.)
  3229.         DS:BX -> 31-byte ASCIZ extension list (three blank-padded bytes
  3230.               per extension)
  3231.         Return: AX = FFFFh (successful)
  3232.         09h    ???
  3233.         AL = drive number (00h = A:)
  3234.         ???
  3235.         Return: ???
  3236.         0Ah ???
  3237.         AL = drive number (00h = A:)
  3238.         ???
  3239.         Return: ???
  3240.         0Bh reset ???
  3241.         Return: AX = FFFFh (successful)
  3242.         see also function 0Dh
  3243.         0Ch check if drive enabled
  3244.         AL = drive number with bit 7 set (80h = A:, etc.)
  3245.         Return: AX = state
  3246.                 0000h disabled or error (check CX)
  3247.                 0001h drive enabled
  3248.             CX = error code (0004h invalid drive number)
  3249.         0Dh set ???
  3250.         BX = ???
  3251.         Return: AX = FFFFh (successful)
  3252.         see also function 0Bh
  3253.         0Eh ???
  3254.         AL = drive number (00h = A:)
  3255.         ???
  3256.         Return: ???
  3257. Return: AX = 0000h, CX = 0001h if DELWATCH busy
  3258.     registers unchanged if AH >= 0Fh on entry
  3259. --------O-2F10FF-----------------------------
  3260. INT 2F U - Multiplex - DR DOS 5.0 - ???
  3261.     AX = 10FFh
  3262.     ES:BX -> ???
  3263. Note:    sets pointer in kernel
  3264. --------N-2F1100-----------------------------
  3265. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  3266.     AX = 1100h
  3267. Return: AL = status
  3268.         00h not installed, OK to install
  3269.         01h not installed, not OK to install
  3270.         FFh installed
  3271.         AH = product identifier (ad hoc by various manufacturers)
  3272.             00h if PC Tools v8 DRIVEMAP
  3273.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  3274.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  3275. Notes:    this function is called by the DOS 3.1+ kernel
  3276.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  3277.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  3278.       redirector
  3279.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  3280.       only supports AL=00h-27h
  3281. --------d-2F1100SFDADA-----------------------
  3282. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  3283.     AX = 1100h subfn DADAh
  3284.     STACK: WORD DADAh
  3285. Return: AL = status
  3286.         00h not installed, OK to install
  3287.         STACK unchanged
  3288.         01h not installed, not OK to install
  3289.         STACK unchanged
  3290.         FFh installed
  3291.         STACK: WORD    ADADh if MSCDEX installed
  3292.                 DADBh if Lotus CD/Networker installed
  3293. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  3294.       than DADAh is considered to mean that MSCDEX is already installed;
  3295.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  3296.       thinking it is already installed when it is in fact CD/Networker
  3297.       that is installed
  3298. Index:    installation check;Lotus CD/Networker
  3299. Index:    Lotus CD/Networker;installation check
  3300. --------N-2F1101-----------------------------
  3301. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  3302.     AX = 1101h
  3303.     SS = DOS DS
  3304.     SDA first filename pointer -> fully-qualified directory name
  3305.     SDA CDS pointer -> current directory structure for drive with dir
  3306. Return: CF set on error
  3307.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3308.     CF clear if successful
  3309. Note:    this function is called by the DOS 3.1+ kernel
  3310. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  3311. --------N-2F1102-----------------------------
  3312. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  3313.     AX = 1102h
  3314.     SS = DOS DS
  3315.     SDA first filename pointer -> fully-qualified directory name
  3316.     SDA CDS pointer -> current directory structure for drive with dir
  3317. Return: CF set on error
  3318.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3319.     CF clear if successful
  3320. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  3321.       this function "SEQ_RMDIR"
  3322. SeeAlso: AX=1101h
  3323. --------N-2F1103-----------------------------
  3324. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  3325.     AX = 1103h
  3326.     SS = DOS DS
  3327.     SDA first filename pointer -> fully-qualified directory name
  3328.     SDA CDS pointer -> current directory structure for drive with dir
  3329. Return: CF set on error
  3330.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3331.     CF clear if successful
  3332. Note:    this function is called by the DOS 3.1+ kernel
  3333. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  3334. --------N-2F1104-----------------------------
  3335. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  3336.     AX = 1104h
  3337.     SS = DOS DS
  3338.     SDA first filename pointer -> fully-qualified directory name
  3339.     SDA CDS pointer -> current directory structure for drive with dir
  3340. Return: CF set on error
  3341.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3342.     CF clear if successful
  3343. Note:    appears to be identical to AX=1103h
  3344. SeeAlso: AX=1103h
  3345. --------N-2F1105-----------------------------
  3346. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  3347.     AX = 1105h
  3348.     SS = DOS DS
  3349.     SDA first filename pointer -> fully-qualified directory name
  3350.     SDA CDS pointer -> current directory structure for drive with dir
  3351. Return: CF set on error
  3352.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3353.     CF clear if successful
  3354.         CDS updated with new path
  3355. Notes:    this function is called by the DOS 3.1+ kernel
  3356.     directory string in CDS should not have a terminating backslash unless
  3357.       the current directory is the root
  3358. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  3359. --------N-2F1106-----------------------------
  3360. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  3361.     AX = 1106h
  3362.     BX = device info word from SFT
  3363.     ES:DI -> SFT
  3364.         SFT DPB field -> DPB of drive containing file
  3365. Return: CF set on error
  3366.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3367.     CF clear if successful
  3368.         SFT updated (redirector must decrement open count, which may be
  3369.           done with INT 2F/AX=1208h)
  3370. Note:    this function is called by the DOS 3.1+ kernel
  3371. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  3372. --------N-2F1107-----------------------------
  3373. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  3374.     AX = 1107h
  3375.     ES:DI -> SFT
  3376.         SFT DPB field -> DPB of drive containing file
  3377. Return: CF set on error
  3378.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3379.     CF clear if successful
  3380.         all buffers for file flushed
  3381.         directory entry updated
  3382. Note:    this function is called by the DOS 3.1+ kernel
  3383. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  3384. --------N-2F1108-----------------------------
  3385. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  3386.     AX = 1108h
  3387.     ES:DI -> SFT
  3388.         SFT DPB field -> DPB of drive containing file
  3389.     CX = number of bytes
  3390.     SS = DOS DS
  3391.     SDA DTA field -> user buffer
  3392. Return: CF set on error
  3393.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3394.     CF clear if successful
  3395.         CX = number of bytes read (0000h = end of file)
  3396.         SFT updated
  3397. Note:    this function is called by the DOS 3.1+ kernel
  3398. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh"DOS",INT 21/AX=5D06h
  3399. --------N-2F1109-----------------------------
  3400. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  3401.     AX = 1109h
  3402.     ES:DI -> SFT
  3403.         SFT DPB field -> DPB of drive containing file
  3404.     CX = number of bytes
  3405.     SS = DOS DS
  3406.     SDA DTA field -> user buffer
  3407. Return: CF set on error
  3408.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3409.     CF clear if successful
  3410.         CX = number of bytes written
  3411.         SFT updated
  3412. Notes:    this function is called by the DOS 3.1+ kernel
  3413.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  3414.       the Device Driver Header field points at PCACHE, but does not
  3415.       intercept any other network redirector functions
  3416. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  3417. --------N-2F110A-----------------------------
  3418. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  3419.     AX = 110Ah
  3420.     BX = file handle
  3421.     CX:DX = starting offset
  3422.     SI = high word of size
  3423.     STACK: WORD low word of size
  3424.     ES:DI -> SFT
  3425.         SFT DPB field -> DPB of drive containing file
  3426.     SS = DOS DS
  3427. Return: CF set on error
  3428.        AL = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3429.     STACK unchanged
  3430. Notes:    this function is called by the DOS 3.10-3.31 kernel
  3431.     the redirector is expected to resolve lock conflicts
  3432. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3433. --------N-2F110A-----------------------------
  3434. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - LOCK/UNLOCK REGION OF FILE
  3435.     AX = 110Ah
  3436.     BL = function
  3437.         00h lock
  3438.         01h unlock
  3439.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  3440.     DS:DX -> parameter block (see #1940)
  3441.     ES:DI -> SFT
  3442.         SFT DPB field -> DPB of drive containing file
  3443.     SS = DOS DS
  3444. Return: CF set on error
  3445.        AL = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3446. Notes:    this function is called by the DOS 4.0+ kernel
  3447.     the redirector is expected to resolve lock conflicts
  3448. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3449.  
  3450. Format of parameter block entry [array, but currently limited to single entry]:
  3451. Offset    Size    Description    (Table 1940)
  3452.  00h    DWORD    start offset
  3453.  04h    DWORD    size of region
  3454. --------N-2F110B-----------------------------
  3455. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  3456.     AX = 110Bh
  3457.     BX = file handle
  3458.     CX:DX = starting offset
  3459.     SI = high word of size
  3460.     STACK: WORD low word of size
  3461.     ES:DI -> SFT for file
  3462.         SFT DPB field -> DPB of drive containing file
  3463. Return: CF set on error
  3464.        AL = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3465.     STACK unchanged
  3466. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls
  3467.       AX=110Ah instead
  3468. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  3469. --------N-2F110C-----------------------------
  3470. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  3471.     AX = 110Ch
  3472.     ES:DI -> current directory structure for desired drive
  3473. Return: CF clear if data valid
  3474.         AL = sectors per cluster
  3475.         AH = media ID byte
  3476.         BX = total clusters
  3477.         CX = bytes per sector
  3478.         DX = number of available clusters
  3479.     CF set if data invalid
  3480. Note:    this function is called by the DOS 3.1+ kernel
  3481. SeeAlso: INT 21/AH=36h
  3482. --------N-2F110D-----------------------------
  3483. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  3484.     AX = 110Dh
  3485.     SDA first filename pointer -> name of file
  3486.     ???
  3487. Return: ???
  3488. Note:    similar to AX=110Eh
  3489. SeeAlso: AX=110Eh
  3490. --------N-2F110E-----------------------------
  3491. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  3492.     AX = 110Eh
  3493.     SS = DOS DS
  3494.     SDA first filename pointer -> fully-qualified name of file
  3495.     SDA CDS pointer -> current directory structure for drive with file
  3496.     STACK: WORD new file attributes
  3497. Return: CF set on error
  3498.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3499.     CF clear if successful
  3500.     STACK unchanged
  3501. Note:    this function is called by the DOS 3.1+ kernel
  3502. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  3503. --------N-2F110F-----------------------------
  3504. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  3505.     AX = 110Fh
  3506.     SS = DOS DS
  3507.     SDA first filename pointer -> fully-qualified name of file
  3508.     SDA CDS pointer -> current directory structure for drive with file
  3509. Return: CF set on error
  3510.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3511.     CF clear if successful
  3512.         AX = file attributes
  3513.         BX:DI = file size
  3514. Note:    this function is called by the DOS 3.1+ kernel
  3515. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  3516. --------N-2F1110-----------------------------
  3517. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  3518.     AX = 1110h
  3519.     SDA first filename pointer -> name of file
  3520.     ???
  3521. Return: ???
  3522. Note:    appears to be similar to AX=110Fh
  3523. SeeAlso: AX=110Eh
  3524. --------N-2F1111-----------------------------
  3525. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  3526.     AX = 1111h
  3527.     SS = DS = DOS DS
  3528.     SDA first filename pointer = offset of fully-qualified old name
  3529.     SDA second filename pointer = offset of fully-qualified new name
  3530.     SDA CDS pointer -> current directory structure for drive with file
  3531. Return: CF set on error
  3532.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3533.     CF clear if successful
  3534. Note:    this function is called by the DOS 3.1+ kernel
  3535. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  3536. --------N-2F1112-----------------------------
  3537. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  3538.     AX = 1112h
  3539.     SS = DS = DOS DS
  3540.     SDA first filename pointer -> name of file
  3541.     ???
  3542. Return: ???
  3543. Note:    similar to AX=1111h
  3544. SeeAlso: AX=1111h
  3545. --------N-2F1113-----------------------------
  3546. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  3547.     AX = 1113h
  3548.     SS = DS = DOS DS
  3549.     SDA first filename pointer -> fully-qualified filename in DOS DS
  3550.     SDA CDS pointer -> current directory structure for drive with file
  3551. Return: CF set on error
  3552.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3553.     CF clear if successful
  3554. Notes:    this function is called by the DOS 3.1+ kernel
  3555.     the filespec may contain wildcards
  3556. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  3557. --------N-2F1114-----------------------------
  3558. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  3559.     AX = 1114h
  3560.     SDA first filename pointer -> name of file
  3561.     ???
  3562. Return: ???
  3563. Note:    similar to AX=1113h
  3564. SeeAlso: AX=1113h
  3565. --------N-2F1115-----------------------------
  3566. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  3567.     AX = 1115h
  3568.     SS = DOS DS
  3569.     ES:DI -> SFT ???
  3570.     ???
  3571. Return: ???
  3572. Note:    similar to AX=1116h
  3573. SeeAlso: AX=1116h,AX=112Eh
  3574. --------N-2F1116-----------------------------
  3575. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  3576.     AX = 1116h
  3577.     ES:DI -> uninitialized SFT
  3578.     SS = DOS DS
  3579.     SDA first filename pointer -> fully-qualified name of file to open
  3580.     STACK: WORD file access and sharing modes (see #0749 at INT 21/AH=3Dh)
  3581. Return: CF set on error
  3582.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3583.     CF clear if successful
  3584.         SFT filled (except handle count, which DOS manages itself)
  3585.     STACK unchanged
  3586. Note:    this function is called by the DOS 3.1+ kernel
  3587. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  3588. SeeAlso: INT 21/AH=60h
  3589. --------N-2F1117-----------------------------
  3590. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  3591.     AX = 1117h
  3592.     ES:DI -> uninitialized SFT
  3593.     SS = DOS DS
  3594.     SDA first filename pointer -> fully-qualified name of file to open
  3595.     SDA CDS pointer -> current directory structure for drive with file
  3596.     STACK: WORD file creation mode
  3597.             low byte = file attributes (see #0748 at INT 21/AH=3Ch)
  3598.             high byte = 00h normal create, 01h create new file
  3599. Return: CF set on error
  3600.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3601.     CF clear if successful
  3602.         SFT filled (except handle count, which DOS manages itself)
  3603.     STACK unchanged
  3604. Note:    this function is called by the DOS 3.1+ kernel
  3605. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  3606. --------N-2F1118-----------------------------
  3607. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  3608.     AX = 1118h
  3609.     ES:DI -> uninitialized SFT
  3610.     SS = DOS DS
  3611.     SDA first filename pointer -> fully-qualified name of file
  3612.     STACK: WORD file creation mode
  3613.             low byte = file attributes
  3614.             high byte = 00h normal create, 01h create new file
  3615. Return: ???
  3616.     STACK unchanged
  3617. Note:    this function is called by the DOS 3.1+ kernel when creating a file
  3618.       on a drive for which the SDA CDS pointer has offset FFFFh
  3619. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  3620. --------N-2F1119-----------------------------
  3621. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  3622.     AX = 1119h
  3623.     SS = DS = DOS DS
  3624.     [DTA] = uninitialized 21-byte findfirst search data
  3625.           (see #0967 at INT 21/AH=4Eh)
  3626.     SDA first filename pointer -> fully-qualified search template
  3627.     SDA search attribute = attribute mask for search
  3628. Return: CF set on error
  3629.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3630.     CF clear if successful
  3631.         [DTA] = updated findfirst search data
  3632.             (bit 7 of first byte must be set)
  3633.         [DTA+15h] = standard directory entry for file (see #0700)
  3634. Notes:    this function is called by the DOS 3.1+ kernel
  3635.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  3636. SeeAlso: AX=111Ah,AX=111Bh,INT 21/AH=1Ah
  3637. --------N-2F111A-----------------------------
  3638. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  3639.     AX = 111Ah
  3640.     ???
  3641. Return: CF set
  3642.         AX = error code (03h for DOS 4.01 IFSFUNC)
  3643. Note:    use AX=111Ch for DOS 5+
  3644. SeeAlso: AX=1119h,AX=111Ch
  3645. --------N-2F111B-----------------------------
  3646. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  3647.     AX = 111Bh
  3648.     SS = DS = DOS DS
  3649.     [DTA] = uninitialized 21-byte findfirst search data
  3650.           (see #0967 at INT 21/AH=4Eh)
  3651.     SDA first filename pointer -> fully-qualified search template
  3652.     SDA CDS pointer -> current directory structure for drive with file
  3653.     SDA search attribute = attribute mask for search
  3654. Return: CF set on error
  3655.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3656.     CF clear if successful
  3657.         [DTA] = updated findfirst search data
  3658.             (bit 7 of first byte must be set)
  3659.         [DTA+15h] = standard directory entry for file (see #0700)
  3660. Note:    this function is called by the DOS 3.1+ kernel
  3661. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=1Ah,INT 21/AH=4Eh,INT 21/AH=60h
  3662. --------N-2F111C-----------------------------
  3663. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  3664.     AX = 111Ch
  3665.     SS = DS = DOS DS
  3666.     ES:DI -> CDS
  3667.     ES:DI -> DTA (MSDOS v5.0)
  3668.     [DTA] = 21-byte findfirst search data
  3669.           (see #0967 at INT 21/AH=4Eh)
  3670. Return: CF set on error
  3671.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3672.     CF clear if successful
  3673.         [DTA] = updated findfirst search data
  3674.             (bit 7 of first byte must be set)
  3675.         [DTA+15h] = standard directory entry for file (see #0700)
  3676. Note:    this function is called by the DOS 3.1+ kernel
  3677. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=1Ah,INT 21/AH=4Fh
  3678. --------N-2F111D-----------------------------
  3679. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  3680.     AX = 111Dh
  3681.     SS = DOS DS
  3682.     SDA PSP segment field = PSP of terminating process
  3683. Return: nothing
  3684. Notes:    used when a process is aborted; the process being terminated is
  3685.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  3686.     this function is called by the DOS 3.1+ kernel
  3687.     closes all FCBs opened by process
  3688. SeeAlso: INT 21/AX=5D04h
  3689. --------N-2F111E-----------------------------
  3690. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  3691.     AX = 111Eh
  3692.     SS = DOS DS
  3693.     STACK: WORD function to execute
  3694.         5F00h  get redirection mode
  3695.             BL = type (03h printer, 04h disk)
  3696.             Return: BH = state (00h off, 01h on)
  3697.         5F01h  set redirection mode
  3698.             BL = type (03h printer, 04h disk)
  3699.             BH = state (00h off, 01h on)
  3700.         5F02h  get redirection list entry
  3701.             BX = redirection list index
  3702.             DS:SI -> 16-byte local device name buffer
  3703.             ES:DI -> 128-byte network name buffer
  3704.             Return: must set user's BX to device type and CX to
  3705.                 stored parameter value, using AX=1218h to get
  3706.                 stack frame address
  3707.         5F03h  redirect device
  3708.             BL = device type (see INT 21/AX=5F03h)
  3709.             CX = stored parameter value
  3710.             DS:SI -> ASCIZ source device name
  3711.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  3712.         5F04h  cancel redirection
  3713.             DS:SI -> ASCIZ device name or network path
  3714.         5F05h  get redirection list extended entry
  3715.             BX = redirection list index
  3716.             DS:SI -> buffer for ASCIZ source device name
  3717.             ES:DI -> buffer for destination ASCIZ network path
  3718.             Return: BH = status flag
  3719.                 BL = type (03h printer, 04h disk)
  3720.                 CX = stored parameter value
  3721.                 BP = NETBIOS local session number
  3722.         5F06h  similar to 5F05h???
  3723. Return: CF set on error
  3724.         AX = error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3725.     STACK unchanged
  3726. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  3727.       (including LAN Manager calls)
  3728.     the PC Network 1.00 redirector does not support function 5F06h
  3729. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  3730. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  3731. --------N-2F111F-----------------------------
  3732. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  3733.     AX = 111Fh
  3734.     STACK: WORD function
  3735.         5E02h  set printer setup
  3736.         5E03h  get printer setup
  3737.         5E04h  set printer mode
  3738.         5E05h  get printer mode
  3739. Return: CF set on error
  3740.         AX = error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3741.     STACK unchanged
  3742. Note:    this function is called by the DOS 3.1+ kernel
  3743. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  3744. --------N-2F1120-----------------------------
  3745. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  3746.     AX = 1120h
  3747.     DS = DOS DS
  3748.     ???
  3749. Return: CF clear (successful)
  3750. Notes:    this function is called by the DOS 3.1+ kernel
  3751.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  3752. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  3753. --------N-2F1121-----------------------------
  3754. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  3755.     AX = 1121h
  3756.     CX:DX = offset (in bytes) from end
  3757.     ES:DI -> SFT
  3758.         SFT DPB field -> DPB of drive with file
  3759.     SS = DOS DS
  3760. Return: CF set on error
  3761.         AL = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3762.     CF clear if successful
  3763.         DX:AX = new file position
  3764. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  3765.       from the end of a file opened with sharing modes set in such a
  3766.       manner that another process is able to change the size of the file
  3767.       while it is already open
  3768. SeeAlso: AX=1228h,INT 21/AH=42h
  3769. --------N-2F1122-----------------------------
  3770. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  3771.     AX = 1122h
  3772.     SS = DOS DS
  3773.     DS = PSP of process about to terminate
  3774. Return: ???
  3775. Notes:    this function is called by the DOS 3.1+ kernel
  3776.     after calling this function, the kernel calls INT 2F/AX=111Dh
  3777. SeeAlso: AX=111Dh,INT 21/AH=4Ch,INT 60/DI=0601h
  3778. --------N-2F1123-----------------------------
  3779. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  3780.     AX = 1123h
  3781.     DS:SI -> ASCIZ filename to canonicalize
  3782.     ES:DI -> 128-byte buffer for qualified name
  3783. Return: CF set if not resolved
  3784. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR DOS 5.0 unless the
  3785.       filename matches the name of a character device
  3786.     called first when DOS attempts to resolve a filename (unless inside an
  3787.       AX=5D00h server call); if this fails, DOS resolves the name locally
  3788. SeeAlso: AX=1221h,INT 21/AH=60h
  3789. --------N-2F1124-----------------------------
  3790. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  3791.     AX = 1124h
  3792.     ES:DI -> SFT
  3793.     SS = DOS DS
  3794.     ???
  3795. Return: CX = ???
  3796. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h
  3797.       returns CF set
  3798. SeeAlso: AX=1126h
  3799. --------N-2F1125-----------------------------
  3800. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  3801.     AX = 1125h
  3802.     STACK: WORD subfunction
  3803.         5D07h get print stream state
  3804.             Return: DL = current state
  3805.         5D08h set print stream state
  3806.             DL = new state
  3807.         5D09h finish print job
  3808. Return: CF set on error
  3809.         AX = error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3810.     STACK unchanged
  3811. Note:    this function is called by the DOS 3.1+ kernel
  3812. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  3813. --------N-2F1126-----------------------------
  3814. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  3815.     AX = 1126h
  3816.     ES:DI -> SFT for file handle 4???
  3817.     SS = DOS DS???
  3818.     ???
  3819. Return: CF set on error
  3820. Notes:    this function is called by the DOS 3.1+ kernel
  3821.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  3822.       bit 11 of the device information word in the SFT set
  3823. SeeAlso: AX=1124h
  3824. --------N-2F1127-----------------------------
  3825. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3826.     AX = 1127h
  3827. Return: CF set
  3828.         AX = 0001h (invalid function) (see #1020 at INT 21/AH=59h/BX=0000h)
  3829. --------N-2F1127BX4E57-----------------------
  3830. INT 2F - NetWare 4.0 - REMOTE FILE COPY
  3831.     AX = 1127h
  3832.     BX = 4E57h ('NW') (signature identifying this as a NetWare call)
  3833.     SI = source file handle
  3834.     DI = destination file handle
  3835.     DX:CX = number of bytes to copy, starting at current file position
  3836. Return: CF clear if successful
  3837.     CF set on error
  3838.         AX = error code (05h,06h,0Bh,11h,3Bh) (see #1020)
  3839.     DX:CX = number of bytes successfully copied (file position updated)
  3840. Notes:    this is the only call which may be made directly to the NetWare
  3841.       redirector from an application
  3842.     COMMAND.COM's COPY and DOS's XCOPY reportedly call INT 21/AX=1127h in
  3843.       order to speed up copies between files on the same network server;
  3844.       if error code 11h (not same device) is returned, the copy is
  3845.       performed in the usual manner.  However, no such calls appear to
  3846.       be present in MS-DOS 6.22.
  3847. --------N-2F1128-----------------------------
  3848. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3849.     AX = 1128h
  3850. Return: CF set
  3851.         AX = 0001h (invalid function) (see #1020 at INT 21/AH=59h/BX=0000h)
  3852. --------N-2F1129-----------------------------
  3853. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3854.     AX = 1129h
  3855. Return: CF set
  3856.         AX = 0001h (invalid function) (see #1020 at INT 21/AH=59h/BX=0000h)
  3857. --------N-2F112A-----------------------------
  3858. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  3859.     AX = 112Ah
  3860.     DS = DOS DS
  3861.     ???
  3862. Return: ???
  3863. Note:    does something to each IFS driver
  3864. --------N-2F112B-----------------------------
  3865. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  3866.     AX = 112Bh
  3867.     SS = DOS DS
  3868.     CX = function/category
  3869.     DS:DX -> parameter block
  3870.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  3871.     ???
  3872. Return: CF set on error
  3873.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3874.     CF clear if successful
  3875. Note:    this function is called by the DOS 4.0 kernel
  3876. --------N-2F112C-----------------------------
  3877. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - "UPDATE_CB" - ???
  3878.     AX = 112Ch
  3879.     SS = DOS DS
  3880.     SDA current SFT pointer -> SFT for file
  3881.     ???
  3882. Return: CF set on error
  3883. Note:    called by SHARE in DOS 5.0-6.0
  3884. --------N-2F112D-----------------------------
  3885. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  3886.     AX = 112Dh
  3887.     BL = subfunction (value of AL on INT 21)
  3888.         02h get extended attributes
  3889.         03h get extended attribute properties
  3890.         04h set extended attributes
  3891.         Return: CF clear
  3892.         else ???
  3893.         Return: CX = ??? (00h or 02h for DOS 4.01)
  3894.     ES:DI -> SFT for file
  3895.     SS = DOS DS
  3896. Return: DS = DOS DS
  3897. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  3898.       INT 21/AX=5703h, and INT 21/AX=5704h
  3899. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  3900. --------N-2F112E-----------------------------
  3901. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - EXTENDED OPEN/CREATE FILE
  3902.     AX = 112Eh
  3903.     SS = DS = DOS DS
  3904.     ES:DI -> uninitialized SFT for file
  3905.     STACK: WORD file attribute for created/truncated file
  3906.             low byte = file attributes
  3907.             high byte = 00h normal create/open, 01h create new file
  3908.     SDA first filename pointer -> fully-qualified filename
  3909.     SDA extended file open action = action code
  3910.           (see #1112 at INT 21/AX=6C00h)
  3911.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  3912. Return: CF set on error
  3913.         AX = error code
  3914.     CF clear if successful
  3915.         CX = result code
  3916.         01h file opened
  3917.         02h file created
  3918.         03h file replaced (truncated)
  3919.         SFT initialized (except handle count, which DOS manages itself)
  3920. Note:    this function is called by the DOS 4.0+ kernel
  3921. BUG:    this function is not called correctly under some DOS versions
  3922.       (at least 5.0 and 6.2):
  3923.         the file attribute on the stack is not correct if the action
  3924.           code is 11h,
  3925.         the result code in CX is not passed back to the application.
  3926. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  3927. --------N-2F112F-----------------------------
  3928. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  3929.     AX = 112Fh
  3930.     SS = DOS DS
  3931.     STACK: WORD function in low byte
  3932.         00h ???
  3933.             DS:SI -> Current Directory Structure???
  3934.             CL = drive (1=A:)
  3935.         01h ???
  3936.             DS:SI -> ???
  3937.             CL = file handle???
  3938.         02h ???
  3939.             DS:SI -> Current Directory Structure???
  3940.             DI = ???
  3941.             CX = drive (1=A:)
  3942.     ???
  3943. Return: CF set on error
  3944.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3945.     CF clear if successful
  3946. Note:    this function is called by the DOS 4.0 kernel
  3947. SeeAlso: INT 21/AH=6Bh
  3948. --------N-2F1130-----------------------------
  3949. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  3950.     AX = 1130h
  3951. Return: ES = CS of resident IFSFUNC
  3952. --------N-2F1180-----------------------------
  3953. INT 2F - LAN Manager Enhanced DOS Services - ???
  3954.     AX = 1180h
  3955.     ???
  3956. Return: ???
  3957. SeeAlso: AX=1100h,AX=1181h,AX=118Eh
  3958. --------N-2F1181-----------------------------
  3959. INT 2F - LAN Manager Enhanced DOS Services - SET USER NAME???
  3960.     AX = 1181h
  3961.     ???
  3962. Return: ???
  3963. SeeAlso: AX=1100h,AX=1180h
  3964. --------N-2F1182-----------------------------
  3965. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  3966.     AX = 1182h
  3967.     ???
  3968. Return: ???
  3969. SeeAlso: AX=1100h,AX=1180h
  3970. --------N-2F1184-----------------------------
  3971. INT 2F - LAN Manager Enhanced DOS - ???
  3972.     AX = 1184h
  3973.     ???
  3974. Return: ???
  3975. --------N-2F1186-----------------------------
  3976. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  3977.     AX = 1186h
  3978.     DS:SI -> stack frame (see #1941)
  3979. Return: CF clear if successful
  3980.     CF set if error
  3981.         AX = error code
  3982. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  3983.       file/printer services
  3984. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  3985.  
  3986. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  3987. Offset    Size    Description    (Table 1941)
  3988.  00h    DWORD    -> number of bytes read
  3989.  04h    WORD    size of buffer
  3990.  06h    DWORD    -> buffer
  3991.  0Ah    DWORD    -> return code
  3992.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  3993.  12h    WORD    handle
  3994. --------N-2F118A-----------------------------
  3995. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  3996.     AX = 118Ah
  3997.     BX = function (0000h or 0001h)
  3998. Return: CF clear if successful
  3999.         AX = 1100h success
  4000.     CF set if error
  4001.         AX = 0001h, etc.
  4002. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  4003. --------N-2F118B-----------------------------
  4004. INT 2F - LAN Manager Enhanced DOS - ???
  4005.     AX = 118Bh
  4006.     ???
  4007. Return: ???
  4008. --------N-2F118C-----------------------------
  4009. INT 2F - LAN Manager Enhanced DOS - ???
  4010.     AX = 118Ch
  4011.     ???
  4012. Return: ???
  4013. --------N-2F118E-----------------------------
  4014. INT 2F - LAN Manager Enhanced DOS - ???
  4015.     AX = 118Eh
  4016.     ???
  4017. Return: ???
  4018. --------N-2F118F-----------------------------
  4019. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  4020.     AX = 118Fh
  4021.     DS:SI -> stack frame (see #1942)
  4022. Return: CF clear if successful
  4023.     CF set if error
  4024.         AX = error code
  4025. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  4026.  
  4027. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  4028. Offset    Size    Description    (Table 1942)
  4029.  00h    DWORD    -> number of bytes read
  4030.  04h    WORD    Size of buffer
  4031.  06h    DWORD    -> buffer
  4032.  0Ah    DWORD    -> return code
  4033.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4034.  12h    WORD    handle
  4035. --------N-2F1190-----------------------------
  4036. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  4037.     AX = 1190h
  4038.     DS:SI -> stack frame (see #1943)
  4039. Return: CF clear if successful
  4040.     CF set if error
  4041.         AX = error code
  4042. SeeAlso: AX=1186h,AX=1191h
  4043.  
  4044. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  4045. Offset    Size    Description    (Table 1943)
  4046.  00h    DWORD    -> number of bytes read
  4047.  04h    WORD    size of buffer
  4048.  06h    DWORD    -> buffer
  4049.  0Ah    DWORD    -> return code
  4050.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4051.  12h    WORD    handle
  4052.  14h    DWORD    ???
  4053. --------N-2F1191-----------------------------
  4054. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  4055.     AX = 1191h
  4056.     DS:SI -> stack frame (see #1944)
  4057. Return: CF clear if successful
  4058.     CF set if error
  4059.         AX = error code
  4060. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  4061.  
  4062. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  4063. Offset    Size    Description    (Table 1944)
  4064.  00h    DWORD    -> number of bytes read
  4065.  04h    WORD    size of buffer
  4066.  06h    DWORD    -> buffer
  4067.  0Ah    DWORD    -> return code
  4068.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4069.  12h    WORD    handle
  4070.  14h    DWORD    ???
  4071. --------D-2F1200-----------------------------
  4072. INT 2F U - DOS 3.0+ internal - INSTALLATION CHECK
  4073.     AX = 1200h
  4074. Return: AL = FFh (for compatibility with other INT 2F functions)
  4075. --------D-2F1201-----------------------------
  4076. INT 2F U - DOS 3.0+ internal - CLOSE CURRENT FILE
  4077.     AX = 1201h
  4078.     SS = DOS DS (must be using a DOS internal stack)
  4079.     SDA current SFT pointer -> SFT of file to close
  4080. Return: CF set on error
  4081.     BX???
  4082.     CX new reference count of SFT
  4083.     ES:DI -> SFT for file
  4084. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  4085. --------D-2F1202-----------------------------
  4086. INT 2F U - DOS 3.0+ internal - GET INTERRUPT ADDRESS
  4087.     AX = 1202h
  4088.     STACK: WORD vector number
  4089. Return: ES:BX -> interrupt vector (DWORD containing handler's address)
  4090.     STACK unchanged
  4091. --------D-2F1203-----------------------------
  4092. INT 2F U - DOS 3.0+ internal - GET DOS DATA SEGMENT
  4093.     AX = 1203h
  4094. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  4095. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  4096.       segment
  4097. --------D-2F1204-----------------------------
  4098. INT 2F U - DOS 3.0+ internal - NORMALIZE PATH SEPARATOR
  4099.     AX = 1204h
  4100.     STACK: WORD character to normalize
  4101. Return: AL = normalized character (forward slash turned to backslash, all
  4102.           others unchanged)
  4103.     ZF set if path separator
  4104.     STACK unchanged
  4105. --------D-2F1205-----------------------------
  4106. INT 2F U - DOS 3.0+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  4107.     AX = 1205h
  4108.     STACK: WORD character to output
  4109. Return: STACK unchanged
  4110. Note:    can be called only from within DOS
  4111. --------D-2F1206-----------------------------
  4112. INT 2F U - DOS 3.0+ internal - INVOKE CRITICAL ERROR
  4113.     AX = 1206h
  4114.     DI = error code
  4115.     BP:SI -> device driver header (see #0987)
  4116.     SS = DOS DS (must be using a DOS internal stack)
  4117.     STACK: WORD value to be passed to INT 24 in AX
  4118. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  4119.     STACK unchanged
  4120. SeeAlso: INT 24
  4121. --------D-2F1207-----------------------------
  4122. INT 2F U - DOS 3.0+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  4123.     AX = 1207h
  4124.     DS:DI -> disk buffer
  4125. Return: nothing
  4126. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4127.       recently used is first); under DOS 3.3, the buffer is then moved to
  4128.       the start of the disk buffer chain if it was marked unused
  4129. Notes:    can be called only from within DOS
  4130.     this function is nearly the same as AX=120Fh
  4131. SeeAlso: AX=120Fh
  4132. --------D-2F1208-----------------------------
  4133. INT 2F U - DOS 3.0+ internal - DECREMENT SFT REFERENCE COUNT
  4134.     AX = 1208h
  4135.     ES:DI -> SFT
  4136. Return: AX = original value of reference count
  4137. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  4138.       that the SFT is not in use).    It is the caller's responsibility to
  4139.       set the reference count to zero after cleaning up.
  4140.     used by network redirectors such as MSCDEX
  4141. SeeAlso: AX=1106h
  4142. --------D-2F1209-----------------------------
  4143. INT 2F U - DOS 3.0+ internal - FLUSH AND FREE DISK BUFFER
  4144.     AX = 1209h
  4145.     DS:DI -> disk buffer
  4146. Return: disk buffer marked unused, contents written to disk if buffer dirty
  4147. Note:    can be called only from within DOS
  4148. SeeAlso: AX=120Eh,AX=1215h
  4149. --------D-2F120A-----------------------------
  4150. INT 2F U - DOS 3.0+ internal - PERFORM CRITICAL ERROR INTERRUPT
  4151.     AX = 120Ah
  4152.     DS = SS = DOS DS (must be using a DOS internal stack)
  4153.     STACK: WORD extended error code
  4154. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  4155.     CF clear if retry, set otherwise
  4156.     STACK unchanged
  4157. Notes:    can only be called during a DOS function call, as it uses various
  4158.       fields in the SDA to set up the registers for the INT 24
  4159.     reportedly sets current DPB's first root directory sector to 1
  4160. SeeAlso: INT 24
  4161. --------D-2F120B-----------------------------
  4162. INT 2F U - DOS 3.0+ internal - SIGNAL SHARING VIOLATION TO USER
  4163.     AX = 120Bh
  4164.     ES:DI -> system file table entry for previous open of file
  4165.     STACK: WORD extended error code (should be 20h--sharing violation)
  4166. Return: CF clear if operation should be retried
  4167.     CF set if operation should not be retried
  4168.         AX = error code (20h) (see #1020 at INT 21/AH=59h/BX=0000h)
  4169.     STACK unchanged
  4170. Notes:    can only be called during a DOS function call
  4171.     should only be called if an attempt was made to open an already-open
  4172.       file contrary to the sharing rules
  4173.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  4174.       inheritance allowed
  4175. --------D-2F120C-----------------------------
  4176. INT 2F U - DOS 3.0+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  4177.     AX = 120Ch
  4178.     SDA current SFT pointer -> SFT for file
  4179.     DS = DOS DS
  4180.     SS = DOS DS (must be using a DOS internal stack)
  4181. Return: ES, DI, AX destroyed
  4182. Notes:    invokes "device open" call on device driver for SFT
  4183.     changes owner of last-accessed SFT to calling process if it was opened
  4184.       via FCB
  4185.     called by network redirectors such as MSCDEX
  4186. --------D-2F120D-----------------------------
  4187. INT 2F U - DOS 3.0+ internal - GET DATE AND TIME
  4188.     AX = 120Dh
  4189.     SS = DOS DS (must be using a DOS internal stack)
  4190. Return: AX = current date in packed format (see #1006 at INT 21/AX=5700h)
  4191.     DX = current time in packed format (see #1005 at INT 21/AX=5700h)
  4192. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  4193. --------D-2F120E-----------------------------
  4194. INT 2F U - DOS 3.0+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  4195.     AX = 120Eh
  4196.     SS = DOS DS (must be using a DOS internal stack)
  4197. Return: DS:DI -> first disk buffer
  4198. Notes:    clears "referenced" flag on all disk buffers
  4199.     in DOS 5+, this has become essentially a NOP, invoking the same code
  4200.       used by AX=1224h (SHARING DELAY)
  4201. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  4202. --------D-2F120F-----------------------------
  4203. INT 2F U - DOS 3.0+ internal - MAKE BUFFER MOST RECENTLY USED
  4204.     AX = 120Fh
  4205.     DS:DI -> disk buffer
  4206.     SS = DOS DS (must be using a DOS internal stack)
  4207. Return: DS:DI -> next buffer in buffer list
  4208. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4209.       recently used is first); under DOS 3.3, the buffer is then moved to
  4210.       the start of the disk buffer chain if it was marked unused
  4211. Note:    this function is the same as AX=1207h except that it returns a
  4212.       pointer to the buffer following the specified buffer in the buffer
  4213.       chain
  4214. SeeAlso: AX=1207h
  4215. --------D-2F1210-----------------------------
  4216. INT 2F U - DOS 3.0+ internal - FIND UNREFERENCED DISK BUFFER
  4217.     AX = 1210h
  4218.     DS:DI -> first disk buffer to check
  4219. Return: ZF clear if found
  4220.         DS:DI -> first unreferenced disk buffer
  4221.     ZF set if not found
  4222. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  4223.       used by AX=1224h (SHARING DELAY)
  4224. SeeAlso: AX=120Eh
  4225. --------D-2F1211-----------------------------
  4226. INT 2F U - DOS 3.0+ internal - NORMALIZE ASCIZ FILENAME
  4227.     AX = 1211h
  4228.     DS:SI -> ASCIZ filename to normalize
  4229.     ES:DI -> buffer for normalized filename
  4230. Return: destination buffer filled with uppercase filename, with slashes turned
  4231.     to backslashes
  4232. SeeAlso: AX=121Eh,AX=1221h
  4233. --------D-2F1212-----------------------------
  4234. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4235.     AX = 1212h
  4236.     ES:DI -> ASCIZ string
  4237. Return: CX = length of string
  4238. SeeAlso: AX=1225h
  4239. --------D-2F1213-----------------------------
  4240. INT 2F U - DOS 3.0+ internal - UPPERCASE CHARACTER
  4241.     AX = 1213h
  4242.     STACK: WORD character to convert to uppercase
  4243. Return: AL = uppercase character
  4244.     STACK unchanged
  4245. --------D-2F1214-----------------------------
  4246. INT 2F U - DOS 3.0+ internal - COMPARE FAR POINTERS
  4247.     AX = 1214h
  4248.     DS:SI = first pointer
  4249.     ES:DI = second pointer
  4250. Return: ZF set if pointers are equal, ZF clear if not equal
  4251.     CF clear if pointers equal, CF set if not
  4252. --------D-2F1215-----------------------------
  4253. INT 2F U - DOS 3.0+ internal - FLUSH BUFFER
  4254.     AX = 1215h
  4255.     DS:DI -> disk buffer
  4256.     SS = DOS DS (must be using a DOS internal stack)
  4257.     STACK: WORD drives for which to skip buffer
  4258.         ignore buffer if drive same as high byte, or bytes differ and
  4259.           the buffer is for a drive OTHER than that given in low byte
  4260. Return: STACK unchanged
  4261. Note:    can be called only from within DOS
  4262. SeeAlso: AX=1209h
  4263. --------D-2F1216-----------------------------
  4264. INT 2F U - DOS 3.0+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  4265.     AX = 1216h
  4266.     BX = system file table entry number
  4267. Return: CF clear if successful
  4268.         ES:DI -> system file table entry
  4269.         BX = relative entry number in system file table containing entry
  4270.         AX destroyed
  4271.     CF set if BX greater than FILES=
  4272. Note:    supported by DR DOS 5+
  4273. SeeAlso: AX=1220h
  4274. --------D-2F1217-----------------------------
  4275. INT 2F U - DOS 3.0+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  4276.     AX = 1217h
  4277.     SS = DOS DS (must be using a DOS internal stack)
  4278.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  4279. Return: CF set on error
  4280.         (drive > LASTDRIVE)
  4281.     CF clear if successful
  4282.         DS:SI -> current directory structure for specified drive
  4283.     STACK unchanged
  4284. SeeAlso: AX=1219h
  4285. --------D-2F1218-----------------------------
  4286. INT 2F U - DOS 3.0+ internal - GET CALLER'S REGISTERS
  4287.     AX = 1218h
  4288. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  4289. Note:    only valid while within DOS
  4290. --------D-2F1219-----------------------------
  4291. INT 2F U - DOS 3.0+ internal - SET DRIVE???
  4292.     AX = 1219h
  4293.     SS = DOS DS (must be using a DOS internal stack)
  4294.     STACK: WORD drive (0 = default, 1 = A:, etc)
  4295. Return: ???
  4296.     STACK unchanged
  4297. Notes:    calls AX=1217h
  4298.     builds a current directory structure if inside server call
  4299.       (INT 21/AX=5D00h)
  4300. SeeAlso: AX=1217h,AX=121Fh
  4301. --------D-2F121A-----------------------------
  4302. INT 2F U - DOS 3.0+ internal - GET FILE'S DRIVE
  4303.     AX = 121Ah
  4304.     DS:SI -> filename
  4305. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  4306.     DS:SI -> filename without leading X: (if present)
  4307. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  4308. --------D-2F121B-----------------------------
  4309. INT 2F U - DOS 3.0+ internal - SET YEAR/LENGTH OF FEBRUARY
  4310.     AX = 121Bh
  4311.     CL = year - 1980
  4312. Return: AL = number of days in February
  4313. Note:    requires DS to be set to the DOS data segment
  4314. SeeAlso: INT 21/AH=2Bh"DATE"
  4315. --------D-2F121C-----------------------------
  4316. INT 2F U - DOS 3.0+ internal - CHECKSUM MEMORY
  4317.     AX = 121Ch
  4318.     DS:SI -> start of memory to checksum
  4319.     CX = number of bytes
  4320.     DX = initial checksum
  4321.     SS = DOS DS (must be using a DOS internal stack)
  4322. Return: AX, CX destroyed
  4323.     DX = checksum
  4324.     DS:SI -> first byte after checksummed range
  4325. Notes:    used by DOS to determine day count since 1/1/80 given a date
  4326.     supported by DR DOS 5.0+
  4327. SeeAlso: AX=121Dh
  4328. --------D-2F121D-----------------------------
  4329. INT 2F U - DOS 3.0+ internal - SUM MEMORY
  4330.     AX = 121Dh
  4331.     DS:SI -> memory to add up
  4332.     CX = 0000h
  4333.     DX = limit
  4334. Return: AL = byte which exceeded limit
  4335.     CX = number of bytes before limit exceeded
  4336.     DX = remainder after adding first CX bytes
  4337.     DS:SI -> byte beyond the one which exceeded the limit
  4338. Notes:    used by DOS to determine year or month given day count since 1/1/80
  4339.     supported by DR DOS 5.0+
  4340. SeeAlso: AX=121Ch
  4341. --------D-2F121E-----------------------------
  4342. INT 2F U - DOS 3.0+ internal - COMPARE FILENAMES
  4343.     AX = 121Eh
  4344.     DS:SI -> first ASCIZ filename
  4345.     ES:DI -> second ASCIZ filename
  4346. Return: ZF set if filenames equivalent, ZF clear if not
  4347. Note:    supported by DR DOS 5.0+
  4348. SeeAlso: AX=1211h,AX=1221h
  4349. --------D-2F121F-----------------------------
  4350. INT 2F U - DOS 3.0+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  4351.     AX = 121Fh
  4352.     SS = DOS DS (must be using a DOS internal stack)
  4353.     STACK: WORD drive letter
  4354. Return: ES:DI -> current directory structure (will be overwritten by next call)
  4355.     STACK unchanged
  4356. --------D-2F1220-----------------------------
  4357. INT 2F U - DOS 3.0+ internal - GET JOB FILE TABLE ENTRY
  4358.     AX = 1220h
  4359.     BX = file handle
  4360. Return: CF set on error
  4361.         AL = 6 (invalid file handle)
  4362.     CF clear if successful
  4363.         ES:DI -> JFT entry for file handle in current process
  4364. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  4365.       file handle, or FFh if the handle is not open
  4366.     supported by DR DOS 5.0+
  4367. SeeAlso: AX=1216h,AX=1229h
  4368. --------D-2F1221-----------------------------
  4369. INT 2F U - DOS 3.0+ internal - CANONICALIZE FILE NAME
  4370.     AX = 1221h
  4371.     DS:SI -> file name to be fully qualified
  4372.     ES:DI -> 128-byte buffer for resulting canonical file name
  4373.     SS = DOS DS (must be using a DOS internal stack)
  4374. Return: (see INT 21/AH=60h)
  4375. Note:    identical to INT 21/AH=60h
  4376. SeeAlso: AX=1123h,INT 21/AH=60h
  4377. --------D-2F1222-----------------------------
  4378. INT 2F U - DOS 3.0+ internal - SET EXTENDED ERROR INFO
  4379.     AX = 1222h
  4380.     SS = DOS data segment
  4381.     SS:SI -> 4-byte records
  4382.         BYTE    error code, FFh = last record
  4383.         BYTE    error class, FFh = don't change
  4384.         BYTE    suggested action, FFh = don't change
  4385.         BYTE    error locus, FFh = don't change
  4386.     SDA error code set
  4387. Return: SI destroyed
  4388.     SDA error class, error locus, and suggested action fields set
  4389. Note:    can be called only from within DOS
  4390. SeeAlso: AX=122Dh,INT 21/AH=59h/BX=0000h,INT 21/AX=5D0Ah
  4391. --------D-2F1223-----------------------------
  4392. INT 2F U - DOS 3.0+ internal - CHECK IF CHARACTER DEVICE
  4393.     AX = 1223h
  4394.     DS = DOS DS
  4395.     SS = DOS DS (must be using a DOS internal stack)
  4396.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  4397.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  4398. Return: CF set if no character device by that name found
  4399.     CF clear if found
  4400.         BH = low byte of device attribute word
  4401. Note:    can only be called from within DOS
  4402. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  4403. --------D-2F1224-----------------------------
  4404. INT 2F U - DOS 3.0+ internal - SHARING RETRY DELAY
  4405.     AX = 1224h
  4406.     SS = DOS DS (must be using a DOS internal stack)
  4407. Return: after delay set by INT 21/AX=440Bh, unless in server call
  4408.       (INT 21/AX=5D00h)
  4409. Note:    delay is dependent on the processor speed, and is skipped entirely if
  4410.       inside a server call
  4411. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  4412. --------D-2F1225-----------------------------
  4413. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4414.     AX = 1225h
  4415.     DS:SI -> ASCIZ string
  4416. Return: CX = length of string
  4417. Note:    supported by DR DOS 5.0+
  4418. SeeAlso: AX=1212h
  4419. --------D-2F1226-----------------------------
  4420. INT 2F U - DOS 3.3+ internal - OPEN FILE
  4421.     AX = 1226h
  4422.     CL = access mode
  4423.     DS:DX -> ASCIZ filename
  4424.     SS = DOS DS (must be using a DOS internal stack)
  4425. Return: CF set on error
  4426.         AL = error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4427.     CF clear if successful
  4428.         AX = file handle
  4429. Notes:    can only be called from within DOS
  4430.     equivalent to INT 21/AH=3Dh
  4431.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4432. SeeAlso: AX=1227h,INT 21/AH=3Dh
  4433. --------D-2F1227-----------------------------
  4434. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  4435.     AX = 1227h
  4436.     BX = file handle
  4437.     SS = DOS DS (must be using a DOS internal stack)
  4438. Return: CF set on error
  4439.         AL = 06h invalid file handle
  4440.     CF clear if successful
  4441. Notes:    can only be called from within DOS
  4442.     equivalent to INT 21/AH=3Eh
  4443.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4444. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  4445. --------D-2F1228BP4200-----------------------
  4446. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  4447.     AX = 1228h
  4448.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  4449.     BX = file handle
  4450.     CX:DX = offset in bytes
  4451.     SS = DOS DS (must be using a DOS internal stack)
  4452. Return: as for INT 21/AH=42h
  4453. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  4454.       function call
  4455.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4456.       LSEEK, and restores frame pointer
  4457.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4458. SeeAlso: INT 21/AH=42h
  4459. --------D-2F1229-----------------------------
  4460. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  4461.     AX = 1229h
  4462.     BX = file handle
  4463.     CX = number of bytes to read
  4464.     DS:DX -> buffer
  4465.     SS = DOS DS (must be using a DOS internal stack)
  4466. Return: as for INT 21/AH=3Fh"DOS"
  4467. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  4468.       a DOS function call
  4469.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4470. SeeAlso: AX=1226h,INT 21/AH=3Fh"DOS"
  4471. --------D-2F122A-----------------------------
  4472. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  4473.     AX = 122Ah
  4474.     BX = entry point to set (0001h or 0002h)
  4475.     DS:SI -> FASTOPEN entry point (see #1945,#1946)
  4476.         (entry point not set if SI = FFFFh for DOS 4.0+)
  4477. Return: CF set if specified entry point already set
  4478. Notes:    entry point in BX is ignored under DOS 3.30
  4479.     both entry points set to same handler by DOS 4.01
  4480.     DOS 5.0 and 6.0 only set entry point 1
  4481.  
  4482. (Table 1945)
  4483. Values DOS 3.30+ FASTOPEN entry point is called with:
  4484.     AL = 01h  Lookup
  4485.         CX = ??? seems to be offset
  4486.         DI = ??? seems to be offset
  4487.         SI = offset in DOS DS of filename
  4488.     AL = 02h  insert file into FASTOPEN cache
  4489.     AL = 03h  delete file from FASTOPEN cache
  4490.         SI = offset in DOS DS of filename
  4491.     AL = 04h  purge FASTOPEN cache
  4492.         AH = subfunction (00h,01h,02h)
  4493.         ES:DI -> ???
  4494.         CX = ??? (subfunctions 01h and 02h only)
  4495. Returns: CF set on error or not installed
  4496. Note: function 03h calls function 01h first
  4497. SeeAlso: #1946,#1947
  4498.  
  4499. (Table 1946)
  4500. Values PC-DOS 4.01 FASTOPEN is additionally called with:
  4501.     AL = 04h ???
  4502.         AH = 03h
  4503.         ???
  4504.     AL = 05h ???
  4505.     AL = 0Bh ???
  4506.     AL = 0Ch ???
  4507.     AL = 0Dh ???
  4508.     AL = 0Eh ???
  4509.     AL = 0Fh ???
  4510.     AL = 10h ???
  4511. SeeAlso: #1945,#1947
  4512.  
  4513. (Table 1947)
  4514. Values MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  4515.     AL = 04h  purge FASTOPEN cache
  4516.         AH = 03h
  4517.         ???
  4518.     AL = 05h ???
  4519.         DL = drive (00h = A:)
  4520.         ???
  4521.     AL = 06h ???
  4522.         ???
  4523. SeeAlso: #1945,#1946
  4524. --------D-2F122B-----------------------------
  4525. INT 2F U - DOS 3.3+ internal - IOCTL
  4526.     AX = 122Bh
  4527.     BP = 44xxh
  4528.     SS = DOS DS (must be using a DOS internal stack)
  4529.     additional registers as appropriate for INT 21/AX=44xxh
  4530. Return: as for INT 21/AH=44h
  4531. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  4532.       a DOS function call
  4533.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4534.       IOCTL, and restores frame pointer
  4535.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  4536. SeeAlso: INT 21/AH=44h
  4537. --------D-2F122C-----------------------------
  4538. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  4539.     AX = 122Ch
  4540. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  4541. Note:    although this function exists in DR DOS 5.0 and Novell DOS 7, it
  4542.       always returns 0000h:0000h prior to Novell DOS 7 Update 15
  4543. SeeAlso: INT 21/AH=52h
  4544. --------D-2F122D-----------------------------
  4545. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  4546.     AX = 122Dh
  4547.     SS = DOS DS
  4548. Return: AX = current extended error code
  4549. SeeAlso: AX=1222h,INT 21/AH=59h/BX=0000h
  4550. --------D-2F122E-----------------------------
  4551. INT 2F U - DOS 4.0+ internal - GET OR SET ERROR TABLE ADDRESSES
  4552.     AX = 122Eh
  4553.     DL = subfunction
  4554.         00h get standard DOS error table (see #1948)
  4555.         Return: ES:DI -> error table
  4556.                  (DOS 4: errors 00h-12h,50h-5Bh)
  4557.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  4558.         01h set standard DOS error table
  4559.         ES:DI -> error table
  4560.         02h get parameter error table (errors 00h-0Ah)
  4561.         Return: ES:DI -> error table
  4562.         03h set parameter error table
  4563.         ES:DI -> error table
  4564.         04h get critical/SHARE error table (errors 13h-2Bh)
  4565.         Return: ES:DI -> error table
  4566.         05h set critical/SHARE error table
  4567.         ES:DI -> error table
  4568.         06h get ??? error table
  4569.         Return: ES:DI -> error table or 0000h:0000h
  4570.         07h set ??? error table
  4571.         ES:DI -> error table
  4572.         08h get error message retriever (see #1949)
  4573.         Return: ES:DI -> FAR procedure to fetch error message
  4574.         09h set ??? error table
  4575.         ES:DI -> error table
  4576. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  4577.       the offset of the error message table within COMMAND.COM, and the
  4578.       procedure returned by DL=08h should be called
  4579.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  4580.       with DL odd are ignored); they are always returned with segment 0001h
  4581.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  4582.       into a single error table
  4583. SeeAlso: AX=0500h,INT 21/AH=59h/BX=0000h
  4584.  
  4585. Format of DOS 4.x error table:
  4586. Offset    Size    Description    (Table 1948)
  4587.  00h    BYTE    FFh
  4588.  01h  2 BYTEs    04h,00h (DOS version???)
  4589.  03h    BYTE    number of error headers following
  4590.  04h 2N WORDs    table of all error headers for table
  4591.         Offset    Size    Description
  4592.          00h    WORD    error message number
  4593.          02h    WORD    offset of error message from start of header
  4594.                 error messages are count byte followed by msg
  4595. Note:    DOS 5 error tables consist of one word per error number; each word
  4596.       contains either the offset of a counted string or 0000h
  4597.  
  4598. (Table 1949)
  4599. Call error retrieval function with:
  4600.     AX = error number (see #1950)
  4601.     DI = offset of error table
  4602. Return: ES:DI -> error message (counted string)
  4603. Notes:    this function needs to access COMMAND.COM if the messages were not
  4604.       loaded into memory permanently with /MSG; the caller should assume
  4605.       that the returned message will be overwritten by the next call of
  4606.       the function
  4607.     supported by DR DOS 5.0
  4608.  
  4609. (Table 1950)
  4610. Values for parameter errors:
  4611.  01h    Too many parameters
  4612.  02h    Required Parameter missing
  4613.  03h    Invalid switch
  4614.  04h    Invalid keyword
  4615.  06h    Parameter value not in allowed range
  4616.  07h    Parameter value not allowed
  4617.  08h    Parameter value not allowed
  4618.  09h    Parameter format not correct
  4619.  0Ah    Invalid parameter
  4620.  0Bh    Invalid parameter combination
  4621. --------D-2F122F-----------------------------
  4622. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  4623.     AX = 122Fh
  4624.     DX = DOS version number (0000h = return true DOS version)
  4625. Note:    not available under DR DOS 5.0 or 6.0
  4626. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  4627. --------O-2F12FFBL00-------------------------
  4628. INT 2F - FreeDOS - FDAK-DDT - INSTALLATION CHECK / STATUS CHECK
  4629.     AX = 12FFh
  4630.     BL = 00h
  4631. Return: AL = DDh if installed
  4632.         BH = state (00h disabled, nonzero enabled)
  4633.         BL = readonly flag (00h writable, nonzero read-only)
  4634. Program: FDAK-DDT is the FreeDOS Alternative Kernel Device Drivers Testing
  4635.       release by Yury A. Semenov
  4636. SeeAlso: AX=12FFh/BL=07h
  4637. --------O-2F12FFBL01-------------------------
  4638. INT 2F - FreeDOS - FDAK-DDT - ENABLE FDAK DRIVERS
  4639.     AX = 12FFh
  4640.     BL = 01h
  4641. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=02h
  4642. --------O-2F12FFBL02-------------------------
  4643. INT 2F - FreeDOS - FDAK-DDT - DISABLE FDAK DRIVERS
  4644.     AX = 12FFh
  4645.     BL = 02h
  4646. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=01h
  4647. --------O-2F12FFBL03-------------------------
  4648. INT 2F - FreeDOS - FDAK-DDT - SWITCH BLOCK DEVICE TO READ-ONLY
  4649.     AX = 12FFh
  4650.     BL = 03h
  4651.     ???
  4652. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=04h
  4653. --------O-2F12FFBL04-------------------------
  4654. INT 2F - FreeDOS - FDAK-DDT - SWITCH BLOCK DEVICE TO READ-WRITE
  4655.     AX = 12FFh
  4656.     BL = 04h
  4657.     ???
  4658. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=03h
  4659. --------O-2F12FFBL05-------------------------
  4660. INT 2F - FreeDOS - FDAK-DDT - TURN ACTIVITY INDICATOR ON
  4661.     AX = 12FFh
  4662.     BL = 05h
  4663. Note:    not yet implemented as of January 1996
  4664. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=06h
  4665. --------O-2F12FFBL06-------------------------
  4666. INT 2F - FreeDOS - FDAK-DDT - TURN ACTIVITY INDICATOR OFF
  4667.     AX = 12FFh
  4668.     BL = 06h
  4669. Note:    not yet implemented as of January 1996
  4670. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=05h
  4671. --------O-2F12FFBL07-------------------------
  4672. INT 2F - FreeDOS - FDAK-DDT - UNINSTALL
  4673.     AX = 12FFh
  4674.     BL = 07h
  4675. Return: ES = segment of FDAK memory block
  4676. Note:    the caller must free the memory block returned in ES
  4677.       (via INT 21/AH=49h)
  4678. SeeAlso: AX=12FFh/BL=00h
  4679. --------m-2F12FFBX0006-----------------------
  4680. INT 2F U - DR DOS 6, Novell DOS 7 - EMM386.EXE - VIDEO MEMORY SPACE CONTROL
  4681.     AX = 12FFh
  4682.     BX = 0006h
  4683.     DX = 0000h
  4684.     CX = function
  4685.         0000h get status of video memory space (MEMMAX /V)
  4686.         0001h map memory into video memory space (MEMMAX +V)
  4687.         0002h unmap memory from video memory space (MEMMAX -V)
  4688. Return: CF clear if successful
  4689.         AX = 0000h (successful)
  4690.         BX = segment of reserved video RAM
  4691.         CX = segment of used video RAM
  4692.         DX = segment of first upper MCB
  4693. Notes:    this functionality is provided by EMM386, and partially supported by
  4694.       HIDOS.SYS
  4695.     BL specifies which program handles the call, BH is the function number
  4696. SeeAlso: AX=D201h/BX=4849h
  4697. --------O-2F12FFBX0000-----------------------
  4698. INT 2F U - Novell DOS 7 - GET ???
  4699.     AX = 12FFh
  4700.     BX = 0000h
  4701. Return: AX = 0000h if supported
  4702.     DX = ??? (internal data)
  4703. SeeAlso: AX=12FFh/BX=0001h
  4704. --------O-2F12FFBX0001-----------------------
  4705. INT 2F U - Novell DOS 7 - SET ???
  4706.     AX = 12FFh
  4707.     BX = 0001h
  4708.     DX = new value for ???
  4709. Return: AX = 0000h if supported
  4710. SeeAlso: AX=12FFh/BX=0000h
  4711. --------O-2F12FFBX0002-----------------------
  4712. INT 2F U - Novell DOS 7 - GET ??? SIZE
  4713.     AX = 12FFh
  4714.     BX = 0002h
  4715. Return: AX = 0000h if supported
  4716.     DX = size of/required-for ??? in paragraphs
  4717. SeeAlso: AX=12FFh/BX=0003h
  4718. --------O-2F12FFBX0003-----------------------
  4719. INT 2F U - Novell DOS 7 - SET ???
  4720.     AX = 12FFh
  4721.     BX = 0003h
  4722.     DX = new value for ???
  4723. Return: AX = 0000h if supported
  4724. SeeAlso: AX=12FFh/BX=0002h
  4725. --------O-2F12FFBX0007-----------------------
  4726. INT 2F U - Novell DOS 7 - SCRIPT.EXE - GET ???
  4727.     AX = 12FFh
  4728.     BX = 0007h
  4729.     CX = 0000h
  4730. Return: CF clear if installed
  4731.         AX = 0000h
  4732.         BX = ??? (4426h)
  4733.         CX = ??? (0068h)
  4734.         DX = PSP segment of resident code???
  4735.         SI = ??? (4AFAh)
  4736.         ES = resident code segment
  4737. --------O-2F12FFBX0009-----------------------
  4738. INT 2F U - Novell DOS 7 - SET ???
  4739.     AX = 12FFh
  4740.     BX = 0009h
  4741.     DX = new value for ???
  4742. Return: ???
  4743. Note:    the DX value is stored at offset 66h in SYSVARS and offset 18h in
  4744.       the Novell DOS 7 internal variable table
  4745. --------m-2F12FFBX0106-----------------------
  4746. INT 2F U - Novell DOS 7 - EMM386.EXE - GET VERSION???
  4747.     AX = 12FFh
  4748.     BX = 0106h
  4749. Return: CF clear if successful
  4750.         AX = 0000h (successful)
  4751.         BX = EDC0h (signature)
  4752.         CL = memory manager variant (02h,03h)
  4753.         (02h when DPMI/VCPI disabled, 03h when DPMI/VCPI loaded)
  4754.         CH = ??? (00h)
  4755.         DX = version??? (0300h for v3.0)
  4756.         ES = segment of EMM386 low-memory stub
  4757. Notes:    BL specifies which program handles the call, BH is the function number
  4758.     if the word at ES:0012h is nonzero, if contains the offset within
  4759.       segment ES of the CEMM-compatible entry point (see #1951)
  4760.     if no other program has hooked INT 67, an alternate installation
  4761.       check is to test for the string
  4762.       "NOVELL EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  4763.       handler's segment; the word immediately preceding this string
  4764.       contains the offset of the API entry point if it is nonzero
  4765. Index:    entry point;Novell EMM386
  4766.  
  4767. (Table 1951)
  4768. Call Novell EMM386.EXE entry point with:
  4769.     AH = 00h get memory manager's status???
  4770.         ???
  4771.     AH = 01h set memory manager's status???
  4772.         ???
  4773.     AH = 02h Weitek coprocessor support???
  4774.         AL = subfunction???
  4775.     more functions???
  4776. SeeAlso: #0855 at INT 21/AX=4402h/SF=02h,#2915 at INT 67/AX=FFA5h
  4777. --------m-2F12FFBL06-------------------------
  4778. INT 2F U - Novell DOS 7 - EMM386.EXE - ???
  4779.     AX = 12FFh
  4780.     BL = 06h
  4781.     BH = function (02h-09h)
  4782.     ???
  4783. Return: ???
  4784. --------O-2F12FFBX0EDC-----------------------
  4785. INT 2F U - Novell DOS 7 - EMM386.EXE - CHECK IF MULTITASKING SUPPORT LOADED???
  4786.     AX = 12FFh
  4787.     BX = 0EDCh ('EDC' = Novell European Development Center)
  4788. Return: AX = 0000h if ??? loaded
  4789.         CF clear
  4790.         BX = 0000h
  4791. Notes:    called by Novell DOS 7 TaskMgr
  4792.     if this function returns with AX=0000h, then the code necessary to
  4793.       support the API on INT 2F/AX=2780h is loaded and that API becomes
  4794.       available for use
  4795.     because the request is handled on the initial trap to the memory
  4796.       manager caused by INT instructions, this function must be invoked
  4797.       with an actual INT 2F instruction instead of some simulation such
  4798.       as a far call to the address in the interrupt vector table
  4799. SeeAlso: AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  4800. --------D-2F13-------------------------------
  4801. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  4802.     AH = 13h
  4803.     DS:DX -> interrupt handler disk driver calls on read/write
  4804.     ES:BX = address to restore INT 13 to on system halt (exit from root
  4805.          shell) or warm boot (INT 19)
  4806. Return: DS:DX set by previous invocation of this function
  4807.     ES:BX set by previous invocation of this function
  4808. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  4809.       original INT 13 handler.  The first is for disk change detection
  4810.       on floppy drives, the second is for tracking formatting calls and
  4811.       correcting DMA boundary errors, the third is for working around
  4812.       problems in a particular version of IBM's ROM BIOS
  4813.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  4814.       also points there unless IO.SYS has installed a special filter for
  4815.       hard disk reads (on systems with model byte FCh and BIOS date
  4816.       "01/10/84" only), in which case it points at the special filter
  4817.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  4818.       functions are still invoked via an INT 13 instruction
  4819.     this is a dangerous security loophole for any virus-monitoring software
  4820.       which does not trap this call ("INT13", "Nomenklatura", and many
  4821.       Bulgarian viruses are known to use it to get the original ROM entry
  4822.       point)
  4823. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  4824. --------N-2F13-------------------------------
  4825. INT 2F U - MS-NET - ???
  4826.     AH = 13h
  4827.     ???
  4828. Return: ???
  4829. Note:    supposedly used to move (or control the movement of) NCBs
  4830. --------U-2F1400-----------------------------
  4831. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  4832.     AX = 1400h
  4833. Return: AL = 00h not installed, OK to install
  4834.          01h not installed, not OK
  4835.          FFh installed
  4836. Notes:    this function is called by the DOS v3.3+ kernel
  4837.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  4838.     supported by DR DOS 5.0
  4839.     documented for MS-DOS 5+, but undocumented in prior versions
  4840. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  4841. --------D-2F1400-----------------------------
  4842. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  4843.     AX = 1400h
  4844. Return: AX = FFFFh if installed
  4845.         BX = maximum memory required to save screen and keyboard info
  4846.     CF clear if successful
  4847.     CF set on error
  4848.         AX = error code
  4849.         0002h invalid function
  4850.         0004h unknown error
  4851. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  4852.       to communicate with the user
  4853. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  4854. --------U-2F1401-----------------------------
  4855. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  4856.     AX = 1401h
  4857.     DS:SI -> internal code page structure (see #1952)
  4858.     BX = new code page (see #1099 at INT 21/AX=6602h)
  4859.     DX = country code???
  4860. Return: AL = status
  4861.          00h successful
  4862.          else DOS error code
  4863. Note:    this function is called by the DOS v3.3+ kernel
  4864. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  4865.  
  4866. Format of DOS 3.30 internal code page structure:
  4867. Offset    Size    Description    (Table 1952)
  4868.  00h  8 BYTEs    ???
  4869.  08h 64 BYTEs    name of country information file
  4870.  48h    WORD    system code page (see #1099 at INT 21/AX=6602h)
  4871.  4Ah    WORD    number of supported subfunctions
  4872.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  4873.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  4874.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  4875.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  4876.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  4877. --------D-2F1401-----------------------------
  4878. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  4879.     AX = 1401h
  4880.     DL = function (00h open, 01h close)
  4881.     DH = wait flag
  4882.         00h block until screen opens
  4883.         01h return error if screen is not available
  4884.         02h urgent--always open screen immediately
  4885. Return: CF clear if successful
  4886.         BX = amount of memory needed to save screen and keyboard info,
  4887.         0000h if default save location can be used (only if DH was 02h)
  4888.     CF set on error
  4889. Note:    the application using the screen is frozen until the popup screen is
  4890.       closed
  4891. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  4892. --------U-2F1402-----------------------------
  4893. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  4894.     AX = 1402h
  4895.     BP = subfunction (same as AL for INT 21/AH=65h)
  4896.     BX = code page (see #1099 at INT 21/AX=6602h)
  4897.     DX = country code (see #0747 at INT 21/AH=38h)
  4898.     DS:SI -> internal code page structure (see #1952)
  4899.     ES:DI -> user buffer
  4900.     CX = size of user buffer
  4901. Return: AL = status
  4902.         00h successful
  4903.         else DOS error code
  4904. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  4905.     code page structure apparently only needed for COUNTRY.SYS pathname
  4906. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  4907. --------D-2F1402-----------------------------
  4908. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  4909.     AX = 1402h
  4910.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  4911. Return: CF clear if successful
  4912.     CF set on error
  4913.         AX = error code (see #1953)
  4914. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  4915.  
  4916. (Table 1953)
  4917. Values for POPUP error code:
  4918.  0001h    process does not own screen
  4919.  0004h    unknown error
  4920.  0005h    invalid pointer
  4921. --------U-2F1403-----------------------------
  4922. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  4923.     AX = 1403h
  4924.     DS:SI -> internal code page structure (see #1952)
  4925.     BX = code page (see #1099 at INT 21/AX=6602h)
  4926.     DX = country code (see #0747 at INT 21/AH=38h)
  4927. Return: AL = status
  4928.          ???
  4929. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  4930. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  4931. --------D-2F1403-----------------------------
  4932. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  4933.     AX = 1403h
  4934.     ES:DI -> buffer containing saved screen
  4935.         (0000h:0000h for default buffer in POPUP)
  4936. Return: CF clear if successful
  4937.     CF set on error
  4938.         AX = error code (see #1953)
  4939. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  4940. --------U-2F1404-----------------------------
  4941. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  4942.     AX = 1404h
  4943.     BX = code page (see #1099 at INT 21/AX=6602h)
  4944.     DX = country code (see #0747 at INT 21/AH=38h)
  4945.     DS:SI -> internal code page structure (see #1952)
  4946.     ES:DI -> user buffer
  4947. Return: AL = status
  4948.          ???
  4949. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  4950.     code page structure apparently only needed for COUNTRY.SYS pathname
  4951. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  4952. --------U-2F14FE-----------------------------
  4953. INT 2F U - DR DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  4954.     AX = 14FEh
  4955.     BX = code page (FFFFh=global code page) (see #1099 at INT 21/AX=6602h)
  4956.     DX = country ID (FFFFh=current country) (see #0747 at INT 21/AH=38h)
  4957.     ES:DI -> country information buffer
  4958.     CL = info ID
  4959.         01h get general internationalization info
  4960.         02h get pointer to uppercase table
  4961.         04h get pointer to filename uppercase table
  4962.         05h get pointer to filename terminator table
  4963.         06h get pointer to collating sequence table
  4964.         07h get pointer to Double-Byte Character Set table
  4965.     CF set (used to return error if not installed)
  4966. Return: CF clear if successful
  4967.         DS:SI -> requested information
  4968.     CF set on error
  4969. Notes:    DR DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  4970.       or FFh on entry.
  4971.     the DR DOS kernel calls this function on INT 21/AX=6501h
  4972.     the value in CL is not range-checked by the DR DOS 5.0 NLSFUNC
  4973. SeeAlso: #1954,AX=14FFh,INT 21/AH=65h
  4974.  
  4975. Format of DR DOS COUNTRY.SYS file:
  4976. Offset    Size    Description    (Table 1954)
  4977.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  4978.  7Eh    WORD    signature EDC1h
  4979.  80h    var    country pointer records
  4980.     Offset    Size    Description
  4981.      00h    WORD    country code (0000h if end of array)
  4982.      02h    WORD    code page (see #1099 at INT 21/AX=6602h)
  4983.      04h    WORD    ??? (0000h)
  4984.      06h  7 WORDs    offsets in file for data tables for subfunctions
  4985.               01h-07h
  4986.  var    var    country information
  4987. --------U-2F14FF-----------------------------
  4988. INT 2F U - DR DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  4989.     AX = 14FFh
  4990.     BX = code page (see #1099 at INT 21/AX=6602h)
  4991. Return: AX = ???
  4992.     ZF set if AX=0000h
  4993. Notes:    DR DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  4994.       or FFh on entry.
  4995.     passes codepage preparation request to each character device supporting
  4996.       the generic IOCTL call
  4997. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  4998. --------U-2F1500-----------------------------
  4999. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  5000.     AX = 1500h
  5001. Return: AX = FFFFh
  5002.     ES:DI -> ??? (graphics data?)
  5003. Note:    this installation check conflicts with the CD-ROM Extensions
  5004.       installation check; moved to AX=AC00h in later versions
  5005. SeeAlso: AX=AC00h
  5006. --------d-2F1500BX0000-----------------------
  5007. INT 2F - CD-ROM - INSTALLATION CHECK
  5008.     AX = 1500h
  5009.     BX = 0000h
  5010. Return: BX = number of CD-ROM drive letters used
  5011.     CX = starting drive letter (0=A:)
  5012. Notes:    this installation check DOES NOT follow the format used by other
  5013.       software
  5014.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  5015.       installation check
  5016. BUG:    this function may return an incorrect starting drive letter when
  5017.       INTERLNK is installed
  5018. SeeAlso: AX=150Ch,AX=15FFh,INT 2F/AX=D000h"Lotus"
  5019. --------c-2F1500CH90-------------------------
  5020. INT 2F U - CDBLITZ v2.11 - INSTALLATION CHECK
  5021.     AX = 1500h
  5022.     CH = 90h (function number)
  5023.     BX = 1234h (magic value for CDBLITZ)
  5024. Return: CX = 1234h if installed
  5025.         CF clear
  5026.         DX = BCD version number (DH = major, DL = minor)
  5027. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5028. SeeAlso: AX=1500h/CH=99h
  5029. --------c-2F1500CH91-------------------------
  5030. INT 2F U - CDBLITZ v2.11 - GET STATISTICS
  5031.     AX = 1500h
  5032.     CH = 91h (function number)
  5033.     BX = 1234h (magic value for CDBLITZ)
  5034. Return: CF clear
  5035.     ES:BX -> statistics record (see #1955)
  5036. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=97h
  5037.  
  5038. Format of CDBLITZ statistics record:
  5039. Offset    Size    Description    (Table 1955)
  5040.  00h    WORD    cache mode (see also AX=1500h/CH=94h)
  5041.         0001h 'min', 0002h 'max'
  5042.  02h    DWORD    number of read calls???
  5043.  06h    DWORD    total number of sectors read
  5044.  0Ah    DWORD    unused??? (zero)
  5045.  0Eh    DWORD    number of cache hit sectors
  5046.  12h    WORD    cache size in KB
  5047.  14h    WORD    unused??? (zero)
  5048.  16h    WORD    cache state (0000h disabled, 0001h enabled)
  5049. --------c-2F1500CH92-------------------------
  5050. INT 2F U - CDBLITZ v2.11 - ENABLE CACHE
  5051.     AX = 1500h
  5052.     CH = 92h (function number)
  5053.     BX = 1234h (magic value for CDBLITZ)
  5054. Return: CF clear
  5055. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=93h,AX=1500h/CH=94h
  5056. --------c-2F1500CH93-------------------------
  5057. INT 2F U - CDBLITZ v2.11 - DISABLE CACHE
  5058.     AX = 1500h
  5059.     CH = 93h (function number)
  5060.     BX = 1234h (magic value for CDBLITZ)
  5061. Return: CF clear
  5062. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5063. --------c-2F1500CH94-------------------------
  5064. INT 2F U - CDBLITZ v2.11 - SET 'MAX' MODE (CACHE BOTH DIRECTORIES AND DATA)
  5065.     AX = 1500h
  5066.     CH = 94h (function number)
  5067.     BX = 1234h (magic value for CDBLITZ)
  5068. Return: CF clear
  5069. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5070. --------c-2F1500CH95-------------------------
  5071. INT 2F U - CDBLITZ v2.11 - SET 'MIN' MODE (CACHE ONLY DIRECTORY ENTRIES)
  5072.     AX = 1500h
  5073.     CH = 95h (function number)
  5074.     BX = 1234h (magic value for CDBLITZ)
  5075. Return: CF clear
  5076. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=94h
  5077. --------c-2F1500CH96-------------------------
  5078. INT 2F U - CDBLITZ v2.11 - FLUSH CACHE
  5079.     AX = 1500h
  5080.     CH = 96h (function number)
  5081.     BX = 1234h (magic value for CDBLITZ)
  5082. Return: CF clear
  5083. Note:    this function resets the counts for number of sectors read and number
  5084.       of cache hits, but no other values in the statistics record
  5085.       (see #1955)
  5086. SeeAlso: AX=1500h/CH=90h
  5087. --------c-2F1500CH97-------------------------
  5088. INT 2F U - CDBLITZ v2.11 - GET CACHE STATISTICS
  5089.     AX = 1500h
  5090.     CH = 97h (function number)
  5091.     BX = 1234h (magic value for CDBLITZ)
  5092. Return: CF clear
  5093.     AL = cache mode (01h 'min', 02h 'max') (see also AX=1500h/CH=94h)
  5094.     AH = cache state (00h disabled, 01h enabled)
  5095.     BX = cache size in KB
  5096.     DX:CX = total number of reads
  5097.     DI:SI = number of cache hits
  5098. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=91h
  5099. --------c-2F1500CH99-------------------------
  5100. INT 2F U - CDBLITZ v2.11 - UNINSTALL
  5101.     AX = 1500h
  5102.     CH = 99h (function number)
  5103.     BX = 1234h (magic value for CDBLITZ)
  5104. Return: CF clear
  5105.     ???
  5106. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5107. SeeAlso: AX=1500h/CH=90h
  5108. --------d-2F1501-----------------------------
  5109. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  5110.     AX = 1501h
  5111.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  5112. Return: buffer filled, for each drive letter
  5113.       BYTE    subunit number in driver
  5114.       DWORD address of device driver header (see #0987)
  5115. Note:    reportedly returns AX=0000h and an invalid address under Windows95
  5116. SeeAlso: AX=1510h
  5117. --------d-2F1502-----------------------------
  5118. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  5119.     AX = 1502h
  5120.     ES:BX -> 38-byte buffer for name of copyright file
  5121.     CX = drive number (0=A:)
  5122. Return: CF set if drive is not a CD-ROM drive
  5123.         AX = 000Fh (invalid drive)
  5124.     CF clear if successful
  5125. SeeAlso: AX=1503h
  5126. --------d-2F1503-----------------------------
  5127. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  5128.     AX = 1503h
  5129.     ES:BX -> 38-byte buffer for name of abstract file
  5130.     CX = drive number (0=A:)
  5131. Return: CF set if drive is not a CD-ROM drive
  5132.         AX = 000Fh (invalid drive)
  5133.     CF clear if successful
  5134. SeeAlso: AX=1502h,AX=1504h
  5135. --------d-2F1504-----------------------------
  5136. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  5137.     AX = 1504h
  5138.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  5139.     CX = drive number (0=A:)
  5140. Return: CF set if drive is not a CD-ROM drive
  5141.         AX = 000Fh (invalid drive)
  5142.     CF clear if successful
  5143. SeeAlso: AX=1502h,AX=1503h
  5144. --------d-2F1505-----------------------------
  5145. INT 2F - CD-ROM - READ VTOC
  5146.     AX = 1505h
  5147.     ES:BX -> 2048-byte buffer
  5148.     CX = drive number (0=A:)
  5149.     DX = sector index (0=first volume descriptor,1=second,...)
  5150. Return: CF set on error
  5151.         AX = error code (15=invalid drive,21=not ready)
  5152.     CF clear if successful
  5153.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  5154. Note:    This function was not supported by Novell DOS 7 NWCDEX prior to the
  5155.       08/16/94 update
  5156. --------d-2F1506-----------------------------
  5157. INT 2F - CD-ROM - TURN DEBUGGING ON
  5158.     AX = 1506h
  5159.     BX = debugging function to enable
  5160. Note:    reserved for development
  5161. SeeAlso: AX=1507h
  5162. --------d-2F1507-----------------------------
  5163. INT 2F - CD-ROM - TURN DEBUGGING OFF
  5164.     AX = 1507h
  5165.     BX = debugging function to disable
  5166. Note:    reserved for development
  5167. SeeAlso: AX=1506h
  5168. --------d-2F1508-----------------------------
  5169. INT 2F - CD-ROM - ABSOLUTE DISK READ
  5170.     AX = 1508h
  5171.     ES:BX -> buffer
  5172.     CX = drive number (0=A:)
  5173.     SI:DI = starting sector number
  5174.     DX = number of sectors to read
  5175. Return: CF set on error
  5176.         AL = error code (0Fh invalid drive,15h not ready)
  5177.     CF clear if successful
  5178. Note:    reportedly returns error 15h (not ready) under Windows95
  5179. SeeAlso: AX=1509h
  5180. --------d-2F1509-----------------------------
  5181. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  5182.     AX = 1509h
  5183.     ES:BX -> buffer
  5184.     CX = drive number (0=A:)
  5185.     SI:DI = starting sector number
  5186.     DX = number of sectors to write
  5187. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  5188. SeeAlso: AX=1508h
  5189. --------d-2F150A-----------------------------
  5190. INT 2F - CD-ROM - RESERVED
  5191.     AX = 150Ah
  5192. --------d-2F150B-----------------------------
  5193. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  5194.     AX = 150Bh
  5195.     CX = drive number (0=A:)
  5196. Return: BX = ADADh if MSCDEX.EXE installed
  5197.         AX = support status
  5198.         0000h if drive not supported
  5199.         nonzero if supported
  5200. SeeAlso: AX=150Dh
  5201. --------d-2F150C-----------------------------
  5202. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION (GET VERSION)
  5203.     AX = 150Ch
  5204. Return: BH = major version
  5205.     BL = minor version
  5206. Notes:    MSCDEX.EXE versions prior to 2.00 return BX=0000h
  5207.     Corel's CORELCDX.COM v1.01d returns 2.20, v1.12a returns 2.21
  5208.     Meridian Data's CDNETEX.EXE returns its own version number, e.g. 4.70
  5209.     Windows95 returns v2.95
  5210. SeeAlso: AX=1500h"CD-ROM"
  5211. --------d-2F150D-----------------------------
  5212. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  5213.     AX = 150Dh
  5214.     ES:BX -> buffer for drive letter list (1 byte per drive)
  5215. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  5216.     to the drive in the same position for function 1501h
  5217. SeeAlso: AX=150Bh
  5218. --------d-2F150E-----------------------------
  5219. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  5220.     AX = 150Eh
  5221.     BX = subfunction
  5222.         00h get preference
  5223.         DX = 0000h
  5224.         Return: DX = preference settings
  5225.         01h set preference
  5226.         DH = volume descriptor preference
  5227.             01h = primary volume descriptor
  5228.             02h = supplementary volume descriptor
  5229.         DL = supplementary volume descriptor preference
  5230.             01h = shift-Kanji
  5231.     CX = drive number (0=A:)
  5232. Return: CF set on error
  5233.         AX = error code (15=invalid drive,1=invalid function)
  5234.     CF clear if successful
  5235. --------d-2F150F-----------------------------
  5236. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  5237.     AX = 150Fh
  5238.     CL = drive number (0=A:)
  5239.     CH bit 0 = copy flag
  5240.         clear if direct copy
  5241.         set if copy to structure which removes ISO/High Sierra diffs
  5242.     ES:BX -> ASCIZ path name
  5243.     SI:DI -> buffer for directory entry (see #1956,#1957)
  5244.          minimum 255 bytes for direct copy
  5245. Return: CF set on error
  5246.         AX = error code
  5247.     CF clear if successful
  5248.         AX = disk format (0=High Sierra,1=ISO 9660)
  5249. Note:    this function was not supported by Novell DOS 7 NWCDEX prior to the
  5250.       08/16/94 update
  5251.  
  5252. Format of CD-ROM directory entry (direct copy):
  5253. Offset    Size    Description    (Table 1956)
  5254.  00h    BYTE    length of directory entry
  5255.  01h    BYTE    length of XAR in Logical Block Numbers
  5256.  02h    DWORD    LBN of data, Intel (little-endian) format
  5257.  06h    DWORD    LBN of data, Motorola (big-endian) format
  5258.  0Ah    DWORD    length of file, Intel format
  5259.  0Eh    DWORD    length of file, Motorola format
  5260. ---High Sierra---
  5261.  12h  6 BYTEs    date and time
  5262.  18h    BYTE    bit flags
  5263.  19h    BYTE    reserved
  5264. ---ISO 9660---
  5265.  12h  7 BYTEs    date and time
  5266.         (seventh byte is offset from GMT in 15-minute increments)
  5267.  19h    BYTE    bit flags
  5268. ---both formats---
  5269.  1Ah    BYTE    interleave size
  5270.  1Bh    BYTE    interleave skip factor
  5271.  1Ch    WORD    volume set sequence number, Intel format
  5272.  1Eh    WORD    volume set sequence number, Motorola format
  5273.  20h    BYTE    length of file name
  5274.  21h  N BYTEs    file name
  5275.     BYTE    (optional) padding if filename is odd length
  5276.       N BYTEs    system data
  5277. SeeAlso: #1957,#0700
  5278.  
  5279. Format of CD-ROM directory entry (canonicalized):
  5280. Offset    Size    Description    (Table 1957)
  5281.  00h    BYTE    length of XAR in Logical Block Numbers
  5282.  01h    DWORD    Logical Block Number of file start
  5283.  05h    WORD    size of disk in logical blocks
  5284.  07h    DWORD    file length in bytes
  5285.  0Bh  7 BYTEs    date and time
  5286.  12h    BYTE    bit flags
  5287.  13h    BYTE    interleave size
  5288.  14h    BYTE    interleave skip factor
  5289.  15h    WORD    volume set sequence number
  5290.  17h    BYTE    length of file name
  5291.  18h 38 BYTEs    ASCIZ filename
  5292.  3Eh    WORD    file version number
  5293.  40h    BYTE    number of bytes of system use data
  5294.  41h 220 BYTEs    system use data
  5295. SeeAlso: #1956
  5296. --------d-2F1510-----------------------------
  5297. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  5298.     AX = 1510h
  5299.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  5300.     ES:BX -> CD-ROM device driver request header (see #1931 at AX=0802h)
  5301. Note:    MSCDEX initializes the device driver request header's subunit field
  5302.       based on the drive number specified in CX
  5303. BUG:    Novell DOS 7 NWCDEX prior to the 12/13/94 update did not initialize
  5304.       the subunit field
  5305. SeeAlso: AX=0802h
  5306. --------d-2F15FFBX0000-----------------------
  5307. INT 2F - CD-ROM - CORELCDX - INSTALLATION CHECK
  5308.     AX = 15FFh
  5309.     BX = 0000h
  5310. Return: BX = ABCDh if CORELCDX loaded
  5311. Note:    Corel's CORELCDX.COM is a replacement for MSCDEX.EXE; it also supports
  5312.       the standard MSCDEX installation check calls AX=1500h and AX=150Ch
  5313. SeeAlso: AX=1500h"CD-ROM",AX=150Ch
  5314. --------W-2F1600-----------------------------
  5315. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  5316.     AX = 1600h
  5317. Return: AL = status
  5318.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  5319.         01h Windows/386 2.x running
  5320.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  5321.           mode nor Windows/386 2.x running) (obsolete--see note)
  5322.         FFh Windows/386 2.x running
  5323.     AL = anything else
  5324.         AL = Windows major version number >= 3
  5325.         AH = Windows minor version number
  5326. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  5327.       drivers, TSRs, and applications) to cooperate with multitasking
  5328.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  5329.     certain calls are also supported in the Microsoft 80286 DOS extender in
  5330.       Windows standard mode
  5331.     this function served as the installation check and AX=1610h served to
  5332.       get the driver entry point for XMS version 1, which is now obsolete.
  5333.       Use AX=4300h and AX=4310h instead
  5334. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  5335. Index:    installation check;XMS version 1
  5336. --------W-2F1602-----------------------------
  5337. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  5338.     AX = 1602h
  5339. Return: ES:DI -> Windows/386 2.x API procedure entry point
  5340. Notes:    this interface is supported in Windows 3.x and Windows95 only for 2.x
  5341.       compatibility
  5342.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  5343.         AX = 0000h
  5344.         ES:DI -> return address
  5345.         JUMP to address returned from INT 2F/AX=1602h
  5346.     After JUMP, at return address:
  5347.         BX = current VM ID.
  5348. SeeAlso: AX=C020h
  5349. --------W-2F1603-----------------------------
  5350. INT 2F C - MS Windows/386 - GET INSTANCE DATA
  5351.     AX = 1603h
  5352. Return: AX = 5248h ('RH') if supported
  5353.         DS:SI -> Windows/386 instance data (see #1958)
  5354. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  5355.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  5356.       supported, as is the case in DOS versions prior to 5.0
  5357.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  5358.       this function, DOSMGR's behavior, and instancing in general
  5359. SeeAlso: AX=1607h/BX=0015h
  5360.  
  5361. Format of Windows/386 instance data:
  5362. Offset    Size    Description    (Table 1958)
  5363.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  5364.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  5365.         0000h if not applicable
  5366.  04h    WORD    number of instance data entries (max 32)
  5367.  06h    Array of instance data entries
  5368.     Offset    Size    Description
  5369.      00h    WORD    segment (0002h = DOS kernel)
  5370.      02h    WORD    offset
  5371.      04h    WORD    size
  5372. --------W-2F1605-----------------------------
  5373. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX INIT BROADCAST
  5374.     AX = 1605h
  5375.     ES:BX = 0000h:0000h
  5376.     DS:SI = 0000h:0000h
  5377.     CX = 0000h
  5378.     DX = flags
  5379.         bit 0 = 0 if Windows enhanced-mode initialization
  5380.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  5381.         bits 1-15 reserved (undefined)
  5382.     DI = version number (major in upper byte, minor in lower)
  5383. Return: CX = 0000h if okay for Windows to load
  5384.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  5385.     CX <> 0 if Windows should not load
  5386.     ES:BX -> startup info structure (see #1959)
  5387.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  5388.           (see #1962)
  5389. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  5390.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  5391.       driver or TSR can watch for this broadcast and return the appropriate
  5392.       values.  If the driver or TSR returns CX <> 0, it is also its
  5393.       responsibility to display an error message.
  5394.     each handler must first chain to the prior INT 2F handler with
  5395.       registers unchanged before processing the call
  5396.     if the handler requires local data on a per-VM basis, it must store the
  5397.       returned ES:BX in the "next" field of a startup info structure and
  5398.       return a pointer to that structure in ES:BX
  5399.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  5400.       already nonzero, the TSR must fail the initialization by setting CX
  5401.       nonzero
  5402.     MSD checks for Windows 3.0 running in standard mode by testing whether
  5403.       CX=FFFFh and other registers are unchanged on return
  5404.     Novell DOS v7.0 (Update 8 - Update 11) TASKMGR in multitasking mode
  5405.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  5406.     Microsoft's EMM386.EXE for DOS 5+ when installed with the NOEMS option
  5407.       changes its driver name from EMMQXXX0 to EMMXXXX0 while Windows is
  5408.       active
  5409. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  5410.  
  5411. Format of Windows Startup Information Structure:
  5412. Offset    Size    Description    (Table 1959)
  5413.  00h  2 BYTEs    major, minor version of info structure
  5414.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  5415.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  5416.  0Ah    DWORD    virtual device reference data (see #1961)
  5417.         (only used if above nonzero)
  5418.  0Eh    DWORD    pointer to instance data records (see #1960) or 0000h:0000h
  5419.  
  5420. Format of one Instance Item in array:
  5421. Offset    Size    Description    (Table 1960)
  5422.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  5423.  04h    WORD    size of instance data
  5424.  
  5425. Format of Virtual Device Reference Data:
  5426. Offset    Size    Description    (Table 1961)
  5427.  00h    DWORD    physical address of ??? or 00000000h
  5428.  04h    DWORD    physical address of ??? table
  5429.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  5430.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  5431.         00000000h = end of table
  5432. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  5433.       chain, the second pointer to a field of 40h bytes followed by a
  5434.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  5435.       the start segment of the UMB area
  5436.  
  5437. (Table 1962)
  5438. Values Windows virtual mode enable/disable procedure is called with:
  5439.     AX = 0000h disable V86 mode
  5440.     AX = 0001h enable V86 mode
  5441.     interrupts disabled
  5442. Return: CF set on error
  5443.     CF clear if successful
  5444.     interrupts disabled
  5445. --------W-2F1606-----------------------------
  5446. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX EXIT BROADCAST
  5447.     AX = 1606h
  5448.     DX = flags
  5449.         bit 0 = 0 if Windows enhanced-mode exit
  5450.         bit 0 = 1 if Microsoft 286 DOS extender exit
  5451.         bits 1-15 reserved (undefined)
  5452. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  5453.       broadcast will be issued immediately.
  5454.     this call will be issued in real mode
  5455.     Novell DOS v7.0 (Update 8 - Update 15) TASKMGR in multitasking mode
  5456.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  5457. SeeAlso: AX=1605h,AX=1609h
  5458. --------W-2F1607-----------------------------
  5459. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  5460.     AX = 1607h
  5461.     BX = virtual device ID (see #1968)
  5462.     CX = (usually) callout subfunction
  5463. Return: (usually) AX,BX,CX,DX,ES contain results
  5464. Notes:    more of a convention than an API, this call specifies a standard
  5465.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  5466.       to DOS device drivers and TSRs
  5467.     see below for details on several virtual devices
  5468. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  5469. SeeAlso: AX=1607h/BX=0018h,AX=1684h"DEVICE API",AX=C020h
  5470. --------W-2F1607BX0006-----------------------
  5471. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  5472.     AX = 1607h
  5473.     BX = 0006h (VxD identifier of "V86MMGR")
  5474.     CX = 0000h
  5475. Return: AX = status
  5476.         0000h if local A20 state changed
  5477.         1607h if A20 unchanged
  5478.         other if global A20 state changed
  5479. SeeAlso: AX=1607h"CALL OUT API"
  5480. --------W-2F1607BX000C-----------------------
  5481. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  5482.     AX = 1607h
  5483.     BX = 000Ch (VxD identifier of "VMD")
  5484. Return: CX = nonzero if mouse driver already virtualized
  5485. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  5486.       nonzero; if yes, it will not automatically virtualize the mouse
  5487.       driver.  This would be used if MOUSE.COM already virtualizes
  5488.       itself using the Windows API.
  5489. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  5490. --------W-2F1607BX000D-----------------------
  5491. INT 2F C - MS Windows95 - "VKD" VIRTUAL DEVICE - ??? CALLOUT
  5492.     AX = 1607h
  5493.     BX = 000Dh (VxD ID for VKD)
  5494.     ???
  5495. Return: ???
  5496. SeeAlso: AX=1607h"CALL OUT API",#1968
  5497. --------W-2F1607BX0010-----------------------
  5498. INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
  5499.     AX = 1607h
  5500.     BX = 0010h (VxD identifier of "BLOCKDEV")
  5501.     CX = function
  5502.         0001h starting FastDisk compatibility tests
  5503.         0002h ending FastDisk compatibility tests
  5504.         0003h check if FastDisk installation allowed
  5505.         Return: CX = 0000h if allowed
  5506. Note:    this interface is called by the Windows FastDisk driver (such as
  5507.       WDCTRL) when it thinks that the INT 13h handler immediately below
  5508.       IO.SYS's INT 13h code is not in ROM; it should be supported by any
  5509.       program which hooks itself underneath IO.SYS's INT 13h code with
  5510.       INT 2F/AH=13h
  5511. SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
  5512. --------W-2F1607BX0014-----------------------
  5513. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  5514.     AX = 1607h
  5515.     BX = 0014h (VxD identifier of "VNETBIOS")
  5516. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  5517.         command code (see #1963)
  5518. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  5519.       the NetBIOS has an extensions Windows should know about
  5520. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
  5521.  
  5522. (Table 1963)
  5523. Values for VNETBIOS action code:
  5524.  00h    "VN_Unknown" unknown command
  5525.  04h    "VN_No_Map"  no memory mapping necessary
  5526.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  5527.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  5528.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  5529.  14h    "VN_Chain_Send"     the chain-send command
  5530.  18h    "VN_Cancel"    special case for cancel command
  5531.  1Ch    "VN_Buffer_In"    buffer is incoming
  5532.  20h    "VN_Buffer_Out" buffer is outgoing
  5533.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  5534. --------D-2F1607BX0015-----------------------
  5535. INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  5536.     AX = 1607h
  5537.     BX = 0015h (VxD identifier of "DOSMGR")
  5538.     CX = function
  5539.         0000h query instance processing
  5540.         DX = 0000h
  5541.         Return: CX = state
  5542.                 0000h not instanced
  5543.                 other instanced (DOS 5+ kernel returns 0001h)
  5544.                 DX = segment of DOS drivers or 0000h for
  5545.                     default of 0070h
  5546.                 ES:BX -> patch table (see #1965)
  5547.         0001h set patches in DOS
  5548.         DX = bit mask of patch requests (see #1964)
  5549.         Return: AX = B97Ch
  5550.             BX = bit mask of patches applied (see #1964)
  5551.             DX = A2ABh
  5552.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  5553.         DX = bit mask of patch requests (see #1964)
  5554.         Return: CX = 0000h (DOS 5-6)
  5555.         Note:    return values are ignored by DOSMGR in Windows 3.1
  5556.         0003h get size of DOS data structures
  5557.         DX = bit mask of request (only one bit can be set)
  5558.             bit 0: Current Directory Structure size
  5559.         Return: if supported request:
  5560.                 AX = B97Ch
  5561.                 CX = size in bytes of requested structure
  5562.                 DX = A2ABh
  5563.             else:
  5564.                 CX = 0000h
  5565.                 all other registers preserved
  5566.         0004h determine instanced data structures
  5567.         Return: AX = B97Ch if supported
  5568.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  5569.             BX = bit mask of instanced items
  5570.                 bit 0: CDS
  5571.                 bit 1: SFT
  5572.                 bit 2: device list
  5573.                 bit 3: DOS swappable data area
  5574.         0005h get device driver size
  5575.         ES = segment of device driver
  5576.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  5577.             DX:AX = A2ABh:B97Ch if successful
  5578.                 BX:CX = size of device driver in bytes
  5579. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  5580.       been instanced via this API and will not perform its own default
  5581.       instancing of the normal DOS/BIOS data if so; if this API is not
  5582.       supported, DOSMGR will also try to access instancing data through
  5583.       INT 2F/AX=1603h
  5584.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  5585.       tables of instancing information for earlier versions of DOS
  5586.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  5587.       DOSMGR's behavior and instancing in general
  5588. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h
  5589. SeeAlso: AX=1684h"DEVICE API"
  5590.  
  5591. Bitfields for DOSMGR patch requests:
  5592. Bit(s)    Description    (Table 1964)
  5593.  0    enable critical sections
  5594.  1    NOP setting/checking user ID
  5595.  2    turn INT 21/AH=3Fh on STDIN into polling loop
  5596.  3    trap stack fault in "SYSINIT" to WIN386
  5597.  4    BIOS patch to trap "Insert disk X:" to WIN386
  5598.  
  5599. Format of DOSMGR patch table:
  5600. Offset    Size    Description    (Table 1965)
  5601.  00h  2 BYTEs    DOS version (major, minor)
  5602.  02h    WORD    offset in DOS data segment of "SAVEDS"
  5603.  04h    WORD    offset in DOS data segment of "SAVEBX"
  5604.  06h    WORD    offset in DOS data segment of InDOS flag
  5605.  08h    WORD    offset in DOS data segment of User ID word
  5606.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  5607.           critical section calls (see INT 2A/AH=80h)
  5608.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  5609.           containing segment of last MCB in conventional memory
  5610. --------W-2F1607BX0018-----------------------
  5611. INT 2F C - MS Windows - "VMPoll" VIRTUAL DEVICE - IDLE CALLOUT
  5612.     AX = 1607h
  5613.     BX = 0018h (VMPoll VxD ID) (see #1968)
  5614.     CX = 0000h
  5615. Return: AX = status
  5616.         0000h if timeslice used
  5617.         nonzero if timeslice not needed
  5618. Note:    when VMPoll makes this callout, all virtual machines are idle
  5619. SeeAlso: AX=1607h"CALL OUT API"
  5620. --------W-2F1607BX0021--------------------------------------
  5621. INT 2F C - MS Windows - "PageFile" VIRTUAL DEVICE - GET LOCK BYTE
  5622.     AX = 1607h
  5623.     BX = 0021h (PageFile VxD ID)
  5624.     CX = 0000h
  5625. Return: AX = status
  5626.         0000h success
  5627.         ES:DI -> cache lock byte in disk cacher
  5628.         other no disk cache or unsupported
  5629. Notes:    PageFile issues this call on real-mode initialization in order to allow
  5630.       disk caches to provide it with a byte which it can use to temporarily
  5631.       lock the disk cache; VMPOLL also issues this call, so it is made
  5632.       twice each time Windows starts up
  5633.     if this call fails, PageFile falls back to other techniques for locking
  5634.       the disk cache
  5635. SeeAlso: AX=1607h"CALL OUT API"
  5636. --------W-2F1607BX002D-----------------------
  5637. INT 2F C - MS Windows - "W32S" VIRTUAL DEVICE - ??? CALLOUT
  5638.     AX = 1607h
  5639.     BX = 002Dh (VxD ID for W32S)
  5640.     ???
  5641. Return: ???
  5642. SeeAlso: AX=1607h"CALL OUT API",#1968
  5643. --------W-2F1607BX0040-----------------------
  5644. INT 2F C - MS Windows - "IFSMgr" VIRTUAL DEVICE - ??? CALLOUT
  5645.     AX = 1607h
  5646.     BX = 0040h (VxD ID for IFSMgr)
  5647.     ???
  5648. Return: ???
  5649. SeeAlso: AX=1607h"CALL OUT API",#1968
  5650. --------W-2F1607BX0446-----------------------
  5651. INT 2F C - MS Windows - "VADLIBD" VIRTUAL DEVICE - ??? CALLOUT
  5652.     AX = 1607h
  5653.     BX = 0446h (VxD ID for VADLIBD)
  5654.     ???
  5655. Return: ???
  5656. SeeAlso: AX=1607h"CALL OUT API",#1968
  5657. --------W-2F1607BX0484-----------------------
  5658. INT 2F C - MS Windows - "IFSMgr" VIRTUAL DEVICE - ??? CALLOUT
  5659.     AX = 1607h
  5660.     BX = 0484h (VxD ID for IFSMgr)
  5661.     ???
  5662. Return: ???
  5663. SeeAlso: AX=1607h"CALL OUT API",#1968
  5664. --------W-2F1607BX0487-----------------------
  5665. INT 2F C - MS Windows - "NWSUP" VIRTUAL DEVICE - ??? CALLOUT
  5666.     AX = 1607h
  5667.     BX = 0487h (VxD ID for NWSUP)
  5668.     ???
  5669. Return: ???
  5670. SeeAlso: AX=1607h"CALL OUT API",#1968
  5671. --------E-2F1607BX22C0-----------------------
  5672. INT 2F C - Rational Systems DOS/4GW - ???
  5673.     AX = 1607h
  5674.     BX = 22C0h
  5675.     ???
  5676. Return: ???
  5677. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h,#1968
  5678. --------W-2F1607BX28A1-----------------------
  5679. INT 2F C - MS Windows - "PharLap" VIRTUAL DEVICE - ??? CALLOUT
  5680.     AX = 1607h
  5681.     BX = 28A1h (VxD ID for PharLap)
  5682.     ???
  5683. Return: ???
  5684. SeeAlso: AX=1607h"CALL OUT API",#1968
  5685. --------W-2F1607BX7A5F-----------------------
  5686. INT 2F C - MS Windows - "SIWVID" VIRTUAL DEVICE - ??? CALLOUT
  5687.     AX = 1607h
  5688.     BX = 7A5Fh (VxD ID for SIWVID)
  5689.     ???
  5690. Return: ???
  5691. SeeAlso: AX=1607h"CALL OUT API",#1968
  5692. --------W-2F1608-----------------------------
  5693. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  5694.     AX = 1608h
  5695. Notes:    called after all installable devices have been initialized
  5696.     real-mode software may be called between the Windows enhanced-mode init
  5697.       call (AX=1605h) and this call; the software must detect this
  5698.       situation
  5699. SeeAlso: AX=1605h,AX=1609h
  5700. --------W-2F1609-----------------------------
  5701. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  5702.     AX = 1609h
  5703. Note:    called at the beginning of a normal exit sequence; not made in the
  5704.       event of a fatal system crash
  5705. SeeAlso: AX=1606h,AX=1608h
  5706. --------W-2F160A-----------------------------
  5707. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  5708.     AX = 160Ah
  5709. Return: AX = 0000h if call supported
  5710.         BX = version (BH=major, BL=minor)
  5711.         CX = mode (0002h = standard, 0003h = enhanced)
  5712. SeeAlso: AX=1600h,AX=4680h
  5713. --------W-2F160B-----------------------------
  5714. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  5715.     AX = 160Bh
  5716.     ES:DI -> communication structure (see #1966) or 0000h:0000h
  5717. Return: ES:DI -> communication structure
  5718. Desc:    this call allows Windows-aware TSRs to make themselves known to
  5719.       Windows.
  5720. Note:    the TSR should allocate a communication structure, place the given
  5721.       ES:DI pointer in the first field, and return a pointer to the new
  5722.       structure
  5723. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  5724.  
  5725. Format of TSR-to-Windows communication structure:
  5726. Offset    Size    Description    (Table 1966)
  5727.  00h    DWORD    pointer to next structure
  5728.  04h    WORD    PSP segment
  5729.  06h    WORD    API version ID (0100h)
  5730.  08h    WORD    EXEC flags
  5731.         bit 0: "WINEXEC"
  5732.         bit 1: "LOADLIBRARY"
  5733.         bit 2: "OPENDRIVER"
  5734.  0Ah    WORD    "exec_cmd_show"
  5735.  0Ch    DWORD    "exec_cmd"
  5736.  10h  4 BYTEs    reserved (0)
  5737.  14h    DWORD    pointer to TSR ID block (see #1967)
  5738.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  5739.  
  5740. Format of Norton Utilities 6.0 TSR ID block:
  5741. Offset    Size    Description    (Table 1967)
  5742.  00h    WORD    length of name string
  5743.  02h  N BYTEs    name of TSR's executable
  5744. --------W-2F160C-----------------------------
  5745. INT 2F - MS Windows 3.1 - DETECT ROMs
  5746.     AX = 160Ch
  5747.     ???
  5748. Return: ???
  5749. Note:    used by ROM Windows; appears to be a NOP under standard Windows95
  5750. SeeAlso: AX=160Bh
  5751. --------D-2F160E-----------------------------
  5752. INT 2F U - MS-DOS 7 kernel - BOOT LOGO SUPPORT???
  5753.     AX = 160Eh
  5754.     BL = subfunction
  5755.         00h get ???
  5756.         AX = state of flag manipulated by subfn 04h and 05h
  5757.             0000h clear
  5758.             FFFFh set
  5759.         DX = ??? (0000h)
  5760.         01h link in INT 10h??? handlers
  5761.         02h unlink INT 10h??? handlers
  5762.         03h ???
  5763.         04h set ??? flag
  5764.         05h clear ??? flag
  5765. Return: AX = 0000h if supported
  5766.         ???
  5767. SeeAlso: AX=160Fh,AX=1611h,AX=1614h
  5768. --------D-2F160F-----------------------------
  5769. INT 2F U - MS-DOS 7 kernel - GET/SET ??? HANDLER
  5770.     AX = 160Fh
  5771.     BL = subfunction
  5772.         00h get ??? handler
  5773.         Return: AX = 0000h if supported
  5774.                 CX:DX -> handler to which control is passed after
  5775.                       ??? executes
  5776.         01h set ??? handler
  5777.         CX:DX -> new handler for ???
  5778.         Return: AX = 0000h if supported
  5779. Notes:    this function is not supported if ??? in the IO.SYS drivers portion of
  5780.       the kernel is an IRET instruction (as is the case on my system)
  5781.       rather than a FAR JMP
  5782.     the indicated handler seems to be related to INT 10 processing
  5783. SeeAlso: AX=160Eh,AX=1611h,AX=1614h
  5784. --------m-2F1610-----------------------------
  5785. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  5786.     AX = 1610h
  5787.     details unavailable
  5788. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  5789.       obsolete.  Use AX=4300h and AX=4310h instead
  5790. SeeAlso: AX=1600h,AX=4310h
  5791. --------D-2F1611-----------------------------
  5792. INT 2F U - MS-DOS 7 kernel - GET SHELL PARAMETERS
  5793.     AX = 1611h
  5794. Return: AX = 0000h if supported
  5795.         DS:DX -> primary shell's executable name
  5796.         DS:SI -> prinary shell command line (counted string)
  5797.         BH = ??? (00h)
  5798.         BL = ??? (00h)
  5799. Desc:    return the program name and commandline from the CONFIG.SYS SHELL=
  5800.       statement
  5801. SeeAlso: AX=160Eh,AX=160Fh,AX=1612h,AX=4A33h
  5802. --------D-2F1612-----------------------------
  5803. INT 2F U - MS-DOS 7 kernel - GET ???
  5804.     AX = 1612h
  5805. Return: AX = 0000h if supported
  5806.         ES:BX -> ??? data
  5807. Note:    called by VTD.VXD
  5808. SeeAlso: AX=160Fh,AX=1611h,AX=1613h
  5809. --------D-2F1613-----------------------------
  5810. INT 2F - MS-DOS 7 kernel - GET SYSTEM.DAT (REGISTRY FILE) PATHNAME
  5811.     AX = 1613h
  5812.     ES:DI -> buffer for full ASCIZ pathname to Windows95 SYSTEM.DAT
  5813.     CX = buffer size in bytes
  5814. Return: AX = 0000h if supported
  5815.         ES:DI buffer filled
  5816.         CX = number of bytes copied into buffer
  5817. SeeAlso: AX=160Eh,AX=1611h,AX=1612h,AX=1614h,AX=1690h
  5818. --------D-2F1614-----------------------------
  5819. INT 2F U - MS-DOS 7 kernel - SET SYSTEM.DAT (REGISTRY FILE) PATHNAME
  5820.     AX = 1614h
  5821.     ES:DI -> ASCIZ pathname to Windows95 SYSTEM.DAT
  5822. Return: AX = status
  5823.         0000h if successful
  5824.         1614h not supported
  5825.         other: maximum length of pathname (004Eh for v4.00.950)
  5826. SeeAlso: AX=160Eh,AX=1611h,AX=1613h,AX=1690h
  5827. ----------2F1615-----------------------------
  5828. INT 2F - Windows95 - SAVE32.COM - INSTALLATION CHECK
  5829.     AX = 1615h
  5830. Return: AX = 0000h if installed
  5831.         BX = segment of resident code
  5832. Program: SAVE32.COM is a TSR included in the Windows95 distribution which
  5833.       preserves the contents of 32-bit registers across invocations of
  5834.       all of the hardware interrupt handlers (which, for some older BIOSes
  5835.       and TSRs, do not properly preserve the high words of the 32-bit
  5836.       registers)
  5837. --------W-2F1680-----------------------------
  5838. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  5839.     AX = 1680h
  5840. Return: AL = status
  5841.         00h if the call is supported
  5842.         80h (unchanged) if the call is not supported
  5843. Notes:    programs can use this function in idle loops to enhance performance
  5844.       under multitaskers; this call is supported by MS Windows 3+, DOS 5+,
  5845.       DPMI 1.0+, and in OS/2 2.0+ for multitasking DOS applications
  5846.     does not block the program; it just gives up the remainder of the time
  5847.       slice
  5848.     should not be used by Windows-specific programs
  5849.     when called very often without intermediate screen output under
  5850.       MS Windows 3.x, the VM will go into an idle-state and will not
  5851.       receive the next slice before 8 seconds have elapsed. This time can
  5852.       be changed in SYSTEM.INI through "IdleVMWakeUpTime=<seconds>".
  5853.       Setting it to zero results in a long wait.
  5854.     this function has no effect under OS/2 2.10-4.0 if the DOS box has an
  5855.       "Idle Sensitivity" setting of 100
  5856. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  5857. --------W-2F1681-----------------------------
  5858. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  5859.     AX = 1681h
  5860. Notes:    used to prevent a task switch from occurring
  5861.     should be followed by an INT 2F/AX=1682h call as soon as possible
  5862.     nested calls are allowed, and must be followed by an appropriate number
  5863.       of "end critical section" calls
  5864.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  5865.       increment by hand.
  5866. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  5867. --------W-2F1682-----------------------------
  5868. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  5869.     AX = 1682h
  5870. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  5871.       and decrement by hand, taking care not to decrement InDOS flag
  5872.       through zero
  5873. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  5874. --------W-2F1683-----------------------------
  5875. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  5876.     AX = 1683h
  5877. Return: BX = current virtual machine (VM) ID
  5878. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  5879.     VM IDs are reused when VMs are destroyed
  5880.     an ID of 0 will never be returned
  5881. SeeAlso: AX=1684h"DEVICE API",AX=1685h,AX=168Bh
  5882. --------W-2F1684-----------------------------
  5883. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  5884.     AX = 1684h
  5885.     BX = virtual device (VxD) ID (see #1968)
  5886.     ES:DI = 0000h:0000h
  5887. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  5888. Note:    some Windows enhanced-mode virtual devices provide services that
  5889.       applications can access.  For example, the Virtual Display Device
  5890.       (VDD) provides an API used in turn by WINOLDAP.
  5891. SeeAlso: AX=1684h/BX=0001h,AX=1684h/BX=0015h,AX=1683h,AX=4011h,INT 20"Windows"
  5892.  
  5893. (Table 1968)
  5894. Values for MS Windows VxD ID:
  5895. Value    Name   CallOut V86 PM    Description
  5896.  0000h    ACT200L            IrDA Infrared ActiSys framer VxD
  5897.  0000h    ACT220L            IrDA Infrared ActiSys 220 framer VxD
  5898.  0000h    ADAPTEC            IrDA Infrared Adaptec framer VxD
  5899.  0000h    AM1500T        N  N    (Win95)
  5900.  0000h    ATI        N  N    (Win95) ATI display driver
  5901.  0000h    CDFS        N  N
  5902.  0000h    CDTSD        N  N    (Win95) CD-ROM Type-Specific Driver
  5903.  0000h    CE2NDIS3    N  N    (W4Wg)
  5904.  0000h    CENDIS        N  N    (W4Wg)
  5905.  0000h    CHIPS        N  N    (Win95) Chips&Tech display driver
  5906.  0000h    CIRRUS        N  N    (Win95) Cirrus display driver
  5907.  0000h    CTNDW        N  N    (W4Wg)
  5908.  0000h    CTVSD        N  N    (Win95) CD-ROM Vendor-Specific Driver
  5909.  0000h    CM2NDIS3    N  N    (W4Wg)
  5910.  0000h    COMBUFF        N  N    (Win95)
  5911.  0000h    COMPAQ        N  N    (Win95) Compaq display driver
  5912.  0000h    CPQNDIS3    N  N    (W4Wg)
  5913.  0000h    CRYSTAL            IrDA Infrared Crystal framer VxD
  5914.  0000h    DBKVSSD        N  N    (Win95) Databook PCMCIA socket services???
  5915.  0000h    DDOM95        N  N
  5916.  0000h    DECLAN        N  N    (W4Wg)
  5917.  0000h    DiskTSD        N  N    (Win95) hard-disk Type-Specific Driver
  5918.  0000h    DiskVSD        N  N    (Win95) hard-disk Vendor-Specific Driver
  5919.  0000h    DMICTVXD    N  N
  5920.  0000h    DRVSPACX    N  N    (Win95)
  5921.  0000h    E30N3        N  N    (W4Wg)
  5922.  0000h    E31N3        N  N    (W4Wg)
  5923.  0000h    EE16        N  N    (W4Wg)
  5924.  0000h    EISA        N  N    (Win95)
  5925.  0000h    EL59X        N  N    (Win95)
  5926.  0000h    ELNK16        N  N    (W4Wg)
  5927.  0000h    ELNK3        N  N    (Win95)
  5928.  0000h    ELNKII        N  N    (W4Wg)
  5929.  0000h    ELNKMC        N  N    (W4Wg)
  5930.  0000h    ELPC3        N  N    (W4Wg)
  5931.  0000h    ENABLE2        N  N    (Win95)
  5932.  0000h    ENABLE4        N  N    (Win95)
  5933.  0000h    EPRO        N  N    (Win95)
  5934.  0000h    ES1488V        N  N    (Win95)
  5935.  0000h    ES1688V        N  N    (Win95)
  5936.  0000h    ES488V        N  N    (Win95)
  5937.  0000h    ES688V        N  N    (Win95)
  5938.  0000h    ESI            IrDA Infrared ESI framer VxD
  5939.  0000h    FILEMON        N  N    DOS386 File Monitor
  5940.  0000h    FLS1MTD        N  N    (Win95) flash-memory driver???
  5941.  0000h    FLS2MTD        N  N    (Win95) flash-memory driver???
  5942.  0000h    HPEISA        N  N    (W4Wg)
  5943.  0000h    HPFEND        N  N    (W4Wg)
  5944.  0000h    HPISA        N  N    (W4Wg)
  5945.  0000h    HPMCA        N  N    (W4Wg)
  5946.  0000h    HSFLOP        N  N
  5947.  0000h    IBMTOK        N  N    (W4Wg)
  5948.  0000h    IBMTOK4        N  N    (Win95)
  5949.  0000h    IRCOMM            IrDA Infrared Virtual COM/LPT driver
  5950.  0000h    IRLAMPEX        IrDA Infrared Protocol VxD
  5951.  0000h    IRLAPFRM        IrDA Infrared Virtual COM/LPT frame driver
  5952.  0000h    IRMATRAK    N  N    (W4Wg)
  5953.  0000h    JAVASUP        N  N    Internet Explorer JAVA support
  5954.  0000h    KEYREMAP    N  N    (Windows95 PowerToys) shift-key remapper
  5955.  0000h    LPT         N    N  N    (Win4Workgroups 3.11) DOS386 LPT Device
  5956.  0000h    LPTENUM        N  N
  5957.  0000h    MONVSD
  5958.  0000h    MGA        N  N    (Win95) Matrox MGA display driver
  5959.  0000h    MSMINI        N  N    (Win95)
  5960.  0000h    MSODISUP     N    N  N    (Win4Workgroups 3.11) MS ODI Support
  5961.  0000h    mvpas        N  N    (Win95) Pro Audio Spectrum driver
  5962.  0000h    NECATAPI    N  N    (Win95)
  5963.  0000h    NICE        N  N    (Win95)
  5964.  0000h    NWNBLINK     N    N  N    (Win4Workgroups 3.11) Netware NetBIOS
  5965.  0000h    OAK        N  N    (Win95) Oak Tech display driver
  5966.  0000h    OCTK32        N  N    (W4Wg)
  5967.  0000h    OTCETH        N  N    (W4Wg)
  5968.  0000h    PARALINK    N  N    (Win95)
  5969.  0000h    PARALLAX        IrDA Infrared Parallax framer VxD
  5970.  0000h    PCNTN3        N  N    (W4Wg)
  5971.  0000h    PE3NDIS        N  N    (W4Wg)
  5972.  0000h    PPM        N  N    (Win95)
  5973.  0000h    PROTEON        N  N    (W4Wg)
  5974.  0000h    QEMMFix        N  N
  5975.  0000h    QIC117        N  N    (Win95) QIC-117 floppy-ctrl tape drive
  5976.  0000h    QPI        N  N    QEMM Programming Interface (see INT 67/AH=3Fh)
  5977.  0000h    RMM        N  N    Real-Mode Mapper for hw with real-mode drivers
  5978.  0000h    S3        N  N    (Win95) S3 display driver
  5979.  0000h    S3INFO        N  N
  5980.  0000h    S3MINI        N  N    S3 display driver
  5981.  0000h    SAGE        N  N    (Plus!) System Agent
  5982.  0000h    scsi1hlp    N  N    (Win95)
  5983.  0000h    SERENUM        N  N
  5984.  0000h    SERIAL         N    N  N    (Win4Workgroups 3.11) DOS386 Serial Device
  5985.  0000h    SERWAVE        N  N
  5986.  0000h    SETP3        N  N    (Win95) Silicon Ethernet Pocket Adapter
  5987.  0000h    SMC8000W    N  N    (W4Wg)
  5988.  0000h    SMC80PC        N  N    (W4Wg)
  5989.  0000h    SMC8100W    N  N    (W4Wg)
  5990.  0000h    SMC8232W    N  N    (W4Wg)
  5991.  0000h    SMC9000        N  N    (W4Wg)
  5992.  0000h    SNIP        N  N    (W4Wg)
  5993.  0000h    SOCKET        N  N    (W4Wg)
  5994.  0000h    SOCKETSV    N  N    (Win95)
  5995.  0000h    SPAP        Y  Y    (Win95)
  5996.  0000h    SPENDIS        N  N    (Win95)
  5997.  0000h    SRAMMTD        N  N    (Win95) flash-memory driver???
  5998.  0000h    STLTH64        N  N    Diamond Stealth64 driver
  5999.  0000h    STLTHMON    N  N
  6000.  0000h    T20N3        N  N    (W4Wg)
  6001.  0000h    T30N3        N  N    (W4Wg)
  6002.  0000h    TCTOK        N  N    (W4Wg)
  6003.  0000h    TSENG        N  N    (Win95) Tseng Labs display driver
  6004.  0000h    UBNEI        N  N    (W4Wg)
  6005.  0000h    UNIMODEM        (Win95) Universal Modem Driver
  6006.  0000h    VDEF        N  N    (Win95)
  6007.  0000h    VGATEWAY    N  Y    (Win95) dialin gateway
  6008.  0000h    VIDEO7        N  N    (Win95) Video7 display driver
  6009.  0000h    VRomD        N  N    (Win95)
  6010.  0000h    VStDspcD        Quarterdeck Stealth D*Space
  6011.  0000h    VXDMON
  6012.  0000h    WD        N  N    (Win95)
  6013.  0000h    WINTOP        N  N    (Windows95 Power Toys)
  6014.  0000h    WSHTCP        N  N
  6015.  0000h    XGA        N  N    (Win95) XGA display driver
  6016.  0001h    VMM        N  N    Virtual Machine Manager
  6017.  0001h    VMM        Y  Y    Windows95 Virtual Machine Manager
  6018.  0002h    Debug
  6019.  0003h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  6020.  0004h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  6021.  0005h    VTD        Y  Y    Virtual Timer Device
  6022.  0006h    V86MMGR         Y    N  N    (Windows3.x) Virtual 8086 Mode Device
  6023.  0006h    V86MMGR        N  Y    (Win95) Virtual 8068 Mode Device
  6024.  0007h    PageSwap    N  N    Paging Device
  6025.  0008h    Parity        N  N    Parity-check trapper
  6026.  0009h    Reboot        N  Y    Ctrl-Alt-Del handler
  6027.  000Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  6028.  000Bh    VSD        N  N    Virtual Sound Device
  6029.  000Ch    VMD         Y    Y  Y    Virtual Mouse Device
  6030.  000Dh    VKD        N  Y    Virtual Keyboard Device
  6031.  000Eh    VCD        N  Y    Virtual COMM Device
  6032.  000Fh    VPD        N  Y    Virtual Printer Device
  6033.  0010h    VHD            Virtual Hard Disk Device (Windows 3.0)
  6034.  0010h    BLOCKDEV     Y    N  N    Virtual Hard Disk Device (Windows 3.1)
  6035.  0010h    IOS         N    N  N    (Win4Workgroups 3.11) DOS386 IOS Device
  6036.  0010h    IOS        Y  Y    Windows95 I/O Supervisor
  6037.  0011h    VMCPD        Y  Y    (Windows3.x) Virtual Math CoProcessor Device
  6038.  0011h    VMCPD        N  Y    (Win95) Virtual Math CoProcessor Device
  6039.  0012h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  6040.  0013h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  6041.  0014h    VNETBIOS     Y    N  N    Virtual NetBIOS Device
  6042.  0015h    DOSMGR         Y    Y  N    DOS data instancing (see #1971)
  6043.  0016h    WINLOAD
  6044.  0017h    SHELL        N  Y    (Windows3)
  6045.  0017h    SHELL        Y  Y    (Win95)
  6046.  0018h    VMPOLL         Y    N  N
  6047.  0019h    VPROD
  6048.  001Ah    DOSNET        N  N    assures network integrity across VMs
  6049.  001Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  6050.  001Bh    VFD        N  N    Virtual Floppy Device
  6051.  001Ch    VDD2            Secondary display adapter
  6052.  001Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  6053.  001Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  6054.  001Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  6055.  001Dh    WINDEBUG    N  Y
  6056.  001Dh    TDDebug        N  Y
  6057.  001Eh    TSRLoad            TSR instance utility
  6058.  001Fh    BiosHook        BIOS interrupt hooker VxD
  6059.  0020h    Int13         N    N  N
  6060.  0021h    PageFile     Y    N  Y    Paging File device
  6061.  0022h    SCSI
  6062.  0022h    APIX        N  Y    (Win95)
  6063.  0023h    MCA_POS            Microchannel Programmable Option Select
  6064.  0024h    SCSIFD            SCSI FastDisk device
  6065.  0025h    VPEND            Pen device
  6066.  0026h    APM            Advanced Power Management
  6067.  0026h    VPOWERD        Y  Y    (Win95) power management
  6068.  0027h    VXDLDR         N    Y  Y    (Win4Wg 3.11/Win95) VXD Loader
  6069.  0028h    NDIS         N    Y  Y    (Win4Wg 3.11) Network Driver Interface Spec
  6070.  0029h    ???
  6071.  002Ah    VWIN32        N  Y    (Win95)
  6072.  002Bh    VCOMM         N    Y  Y    (Win4Workgroups 3.11) DOS386 VCOMM Device
  6073.  002Ch    SPOOLER        N  N    Windows95 print spooler
  6074.  002Dh    W32S         Y    N  Y    WIN32s 32-bit extension to Windows API
  6075.  002Eh    ???
  6076.  002Fh    ???
  6077.  0030h    MACH32         N    N  Y    ATI Mach32 video card
  6078.  0031h    NETBEUI         N    N  N    (Win4Workgroups 3.11) NETBEUI
  6079.  0032h    SERVER         N    Y  Y    (Win4Workgroups 3.11) Int21 File Server
  6080.  0032h    VSERVER        N  Y    (Win95) Int21 File Server
  6081.  0033h    CONFIGMG    Y  Y    (Win95)
  6082.  0033h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  6083.  0034h    DWCFGMG.SYS    Y    DOS Plug-and-Play configuration manager
  6084.  0035h    SCSIPORT    N  N    (Win95) virtualized access to SCSI adapter
  6085.  0036h    VFBACKUP    Y  Y    (Win95)
  6086.  0037h    ENABLE        Y  Y    (Win95)
  6087.  0038h    VCOND        Y  Y    (Win95)
  6088.  0039h    ???
  6089.  003Ah    VPMTD         N    N  Y    (Win4Workgroups 3.11) IFAX Scheduler Device
  6090.  003Bh    DSVXD        Y  N    DoubleSpace VxD from MS-DOS v6.x
  6091.  003Ch    ISAPNP        N  N    (Win95)
  6092.  003Dh    BIOS        Y  Y    (Win95)
  6093.  003Eh    WSOCK        Y  Y    (Win95) WinSock
  6094.  003Fh    WSIPX        N  N    (Win95) IPX WinSock
  6095.  0040h    IFSMGR        N  N    (Win95)
  6096.  0041h    VCDFSD        N  N    (Win95) CD-ROM File System Driver (MSCDEX)
  6097.  0042h    MRCI2        N  N    (Win95) DriveSpace3
  6098.  0043h    PCI        N  N    (Win95)
  6099.  0048h    PERF        N  N    (Win95)
  6100.  0051h    ISAPNP        N  N    (Win95) ISA Plug-and-Play manager
  6101.  008Dh    ESDI_506    N  N    (Win95) MFM/RLL/ESDI disk driver
  6102.  0090h    voltrack    N  N    (Win95) Volume Tracker
  6103.  00FDh    FAKEIDE        N  N    (Chicago)
  6104.  0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  6105.  011Fh    VFLATD        N  Y    (Win95)
  6106.  0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  6107.  0200h    VTEMPD            dummy template driver by Ray Patch
  6108.  0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  6109.  0202h    WINICE        Y  Y    SoftICE/W
  6110.  0202h    SICE        Y  Y
  6111.  0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  6112.  0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  6113.  0205h    BCW        Y  Y    Nu-Mega Bounds Checker for Windows
  6114.  0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  6115.  0207h    DPMS         N    Y  N    Novell DOS Protected Mode Services
  6116.  0234h    VCOMMUTE    Y  Y    PC Tools Commute
  6117.  0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  6118.  0443h    ???
  6119.  0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  6120.  0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  6121.  0446h    VADLIBD         Y    Y  Y    MMSys Win386 AdLib Device (v3.x)
  6122.  0447h    ???
  6123.  0448h    SETULTRA        Gravis UltraSound setup
  6124.  0449h    vjoyd        N  Y    (Win95) joystick
  6125.  044Ah    mmdevldr    Y  Y    (Win95)
  6126.  044Bh    ???
  6127.  044Ch    msmpu401    N  N    (Win95) MPU-401 MIDI driver
  6128.  044Dh    msopl        N  N    (Win95) OPL-3 (SoundBlaster FM) driver
  6129.  044Eh    mssblst        N  N    (Win95) SoundBlaster MIDI driver
  6130.  045Dh    VflatD        N  Y    dva.386, part of WIN32s
  6131.  045Eh    ???
  6132.  045Fh    mssndsys        Microsoft Sound System audio driver
  6133.  045Fh    azt16        Y  Y    Aztech Sound Galaxy 16 audio driver
  6134.  0460h    UNIMODEM    N  Y    Universal Modem driver
  6135.  0480h    VNetSup         N    Y  Y    (Win4Workgrps 3.11) Virtual Network Support
  6136.  0481h    VRedir         N    N  N    (Win4Workgroups 3.11) Redirector File System
  6137.  0481h    VREDIR        N  N    (Win95) Redirector File System driver
  6138.  0482h    VBrowse        Y  Y    Win386 Virtual Browser
  6139.  0482h    SNAPVXD        Y  Y    (Win95)
  6140.  0483h    VSHARE        N  N    (Win4Workgroups) Virtual SHARE
  6141.  0483h    VSHARE        Y  Y    (Win95) Virtual SHARE
  6142.  0484h    IFSMgr         Y    N  Y    (Win4Wg 3.11) Installable File System Manager
  6143.  0485h    ???            ???
  6144.  0486h    VFAT         N    Y  Y    (Win4Workgroups 3.11) Win386 HPFS Driver
  6145.  0487h    NWLINK        Y  Y    Win386 Virtual Packet Exchange Protocol
  6146.  0487h    NWSUP         Y    N  N    NetWare Vnetbios shim
  6147.  0488h    VTDI        N  N    (Win95)
  6148.  0489h    VIP        Y  N    (Win95)
  6149.  048Ah    VTCP        Y
  6150.  048Ah    MSTCP        Y  N    (Win95) TCP stack
  6151.  048Bh    VCache         N    Y  Y    (Win4Workgroups 3.11) Virtual File Cache
  6152.  048Bh    VCACHE        Y  Y    (Win95) disk cache
  6153.  048Ch    ???            ???
  6154.  048Dh    RASMAC        Y  Y    enhanced mode Win4Workgroups RASMAC device
  6155.  048Eh    NWREDIR        Y  Y    (Win95)
  6156.  048Fh    ???            ???
  6157.  0490h    ???            ???
  6158.  0491h    FILESEC            (Win95) File Access Control Manager
  6159.  0492h    NWSERVER        (Win95)
  6160.  0493h    SECPROV            (Win95) Security Provider
  6161.  0494h    NSCL        Y  Y    (Win95)
  6162.  0495h    AFVXD        N  N    (Win95)
  6163.  0496h    NDIS2SUP        (W4Wg???)
  6164.  0497h    MSODISUP    N  N    (W4Wg???)
  6165.  0498h    Splitter    N  N    (Win95)
  6166.  0499h    PPPMAC        Y  Y    (Win95)
  6167.  049Ah    VDHCP        Y  Y    (Win95)
  6168.  049Bh    VNBT        Y  Y    (Win95) NetBIOS-over-TCP/IP driver
  6169.  049Ch    ???
  6170.  049Dh    LOGGER            (Win95)
  6171.  04A2h    IRLAMP            IrDA Infrared Enumerator VxD
  6172.  097Ch    PCCARD        N  Y    (Win95)
  6173.  1020h    VCV            Microsoft C/C++ 7.00 CodeView
  6174.  1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  6175.  1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  6176.  1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  6177.  2020h    PIPE        Y  Y    by Thomas W. Olson, in Windows/DOS DevJrn 5/92
  6178.  21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  6179.  2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  6180.  22C0h    ???         Y        Rational Systems DOS/4GW ???
  6181.  2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  6182.  24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  6183.  24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  6184.  24A2h    SYMEvent    Y  Y    Norton Utilities v8
  6185.  2540h    VILD        Y  N    INTERLNK client from MS-DOS v6.x
  6186.  2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  6187.  2860h    COMMTASK     N    N  Y    Windows 386-mode preemptive tasker by James
  6188.                   A. Kenemuth of Interabang Computing
  6189.  28A0h    PHARLAPX    Y    PharLap inter-VM communications DLL
  6190.  28A1h    PharLap         Y    Y  Y    PharLap 386|DOS-Extender DOSXNT.386
  6191.  28C0h    VXD         N    Y  Y    Generic VxD for real and protected mode by
  6192.                   Andrew Schulman in MSJ February 1993
  6193.  28C1h    PUSHKEYS        VKD_Force_Keys device
  6194.  28C2h    VCR3D            Virtual CR3, by A.Schulman in MSJ October 1992
  6195.  2925h    EDOS        Y  Y    Enhanced DOS by Firefly Software
  6196.  292Dh    VSBPD        Y  Y    Sound Blaster Pro
  6197.  295Ah    GRVSULTR    Y  Y    Gravis UltraSound / UltraSound ACE
  6198.  304Ch    DWCFGMG.SYS    Y    Plug-and-Play configuration access
  6199.  3098h    VstlthD         N    N  N    for QEMM Stealth ROM mode
  6200.  3099h    VVidramD    Y  N    for QEMM VIDRAM support
  6201.  30F6h    WSVV        N  Y    (Win95) WinSock for Voice-View Modems???
  6202.  310Eh    WPS        N  Y    MS DevNet CD-ROM: Windows Process Status
  6203.  313Bh    PMC            Power Management Coordinator
  6204.  318Ah    LMOUSE        Y  Y    (Win95) Logitech mouse???
  6205.  31CFh    STAT.386        Ton Plooy's processor statistics VxD
  6206.  3202h    VdspD        N  N    (Win95)
  6207.  3203h    vpasd        N  N    (Win95) Pro Audio Spectrum driver
  6208.  32A4h    SBAWE        Y  Y    (Win95) SoundBlaster AWE driver
  6209.  32A5h    VSB16        N  N    (Win95) SoundBlaster 16 driver
  6210.  32CBh    VFRAD        Y  Y    Dr.Franz - Simultan's diagnotics VFRAD.386
  6211.  33AAh    DECCORE        Y  Y    (Win95) DEC Pathworks core VxD
  6212.  33B4h    DECLICL        N  N    (Win95)
  6213.  33F0h    VIWD        Y  Y    Gravis UltraSound Plug-n-Play Interwave v1.x
  6214.  33FCh    ASPIENUM    N  N    (Win95)
  6215.  34DCh    MAGNARAM    N  Y    Quarterdeck MagnaRAM (MAGNA31.VXD/MAGNA95.VXD)
  6216.  357Eh    DSOUND        Y  Y    (Win95) DirectSound
  6217.  36AEh    AIB-PC.386    Y  Y    Sunset Laboratory interface hardware driver
  6218.  377Bh    MX1501HAD        Cherry keyboard chipcard reader
  6219.  38DAh    VIWD        Y  Y    UltraSond PnP InterWave driver v2.0beta
  6220.  4321h    POSTMSG        Y  Y    (see #1996)
  6221.  4321h    VPCD        N  N    PCache
  6222.  4321h    avvxp500    N  N    (Win95) VxP500 driver
  6223.  6001h    REGVXD        Y  Y    Windows95 Registry Monitor helper
  6224.  7A5Fh    SIWVID         Y    Y  Y    Soft-ICE for Windows video driver
  6225.  7FE0h    VSWITCHD    Y  N    by Jeff Prosise
  6226.  7FE0h    VWFD         N    Y  Y    reports windowed/fullscreen state; by Neil
  6227.                   Sandlin of Microsoft, shipped with ANSIPLUS
  6228.  7FE1h    VWATCHD         N    Y  Y    basic driver w/ no functionality except tracing
  6229.                   by Keith Jin of Microsoft PSS
  6230.  7FE5h    VFINTD         N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  6231.                   Sandlin of Microsoft
  6232.  7FE7h    VMPAGES         N    Y  Y    demonstration of exporting VxD services, by
  6233.                   Neil Sandlin of Microsoft
  6234.  7FE8h    VPOSTD        Y  Y    PostMessage() demo by Curtis J. Palmer of MS
  6235.  7FE9h    VIdleD         N    N  N    demonstration of Call_When_Idle function, by
  6236.                   Bernie McIlroy of Microsoft
  6237.  7FEBh    VMIOD         N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  6238.                   Sandlin of Microsoft
  6239.  7FEDh    VMIRQD         N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  6240.                   Sandlin of Microsoft
  6241.  8888h    VbillD            Bill Potvin II's for reversing Compaq LTE video
  6242.  EEEEh    VEPSD        N  N    Virtual Extended Paging Services for
  6243.                   Borland C++ v4.0
  6244. Notes:    The high bit of the VxD ID is reserved for future use. Originally,
  6245.       the next 10 bits were the OEM number which was assigned by Microsoft,
  6246.       and the low 5 bits were the device number.  Currently, Microsoft
  6247.       assigns VxD IDs individually for each driver; send blank email to
  6248.       vxdid@microsoft.com for more information.
  6249.     "CallOut"=Y indicates that the VxD uses the INT 2F/AX=1607h/BX=VxDID
  6250.       device callout interface; "PM" and "V86" indicate whether the VxD
  6251.       provides an API entry point in protected mode and Virtual-86 mode
  6252.       (e.g. DOS boxes)
  6253. --------W-2F1684BX0001-----------------------
  6254. INT 2F - MS Windows 95 - VMM - GET API ENTRY POINT
  6255.     AX = 1684h
  6256.     BX = 0001h (virtual device ID for VMM) (see #1968)
  6257.     ES:DI = 0000h:0000h
  6258. Return: ES:DI -> VxD API entry point (see #3321)
  6259.           0000h:0000h if the VxD does not support an API
  6260. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6261.  
  6262. (Table 3321)
  6263. Call Windows VMM 16-bit entry point with:
  6264.     AX = function number
  6265.         ---registry functions---
  6266.         0100h "RegOpenKey"
  6267.         STACK:    DWORD    -> DWORD for returned key handle
  6268.             DWORD    -> ASCIZ registry key name
  6269.             DWORD    HKEY (see #3322)
  6270.         0101h "RegCreateKey"
  6271.         STACK:    DWORD    -> DWORD for returned key handle
  6272.             DWORD    -> ASCIZ registry key name
  6273.             DWORD    HKEY (see #3322)
  6274.         0102h "RegCloseKey"
  6275.         STACK:    DWORD    key handle from RegOpenKey or RegCreateKey
  6276.         0103h "RegDeleteKey"
  6277.         STACK:    DWORD    -> ASCIZ registry key name
  6278.             DWORD    HKEY (see #3322)
  6279.         0104h "RegSetValue"
  6280.         STACK:    DWORD    ???
  6281.             DWORD    -> ???
  6282.             DWORD    ???
  6283.             DWORD    -> ???
  6284.             DWORD    HKEY (see #3322)
  6285.         0105h "RegQueryValue"
  6286.         STACK:    DWORD    -> DWORD for ???
  6287.             DWORD    -> ASCIZ ???
  6288.             DWORD    -> ASCIZ ???
  6289.             DWORD    HKEY (see #3322)
  6290.         0106h "RegEnumKey"
  6291.         STACK:    DWORD    ???
  6292.             DWORD    -> ASCIZ ???
  6293.             DWORD    ???
  6294.             DWORD    HKEY (see #3322)
  6295.         0107h "RegDeleteValue"
  6296.         0108h "RegEnumValue"
  6297.         STACK:    DWORD    -> DWORD for ???
  6298.             DWORD    -> BYTE ???
  6299.             DWORD    -> DWORD for ???
  6300.             DWORD    -> DWORD for ???
  6301.             DWORD    -> DWORD for ???
  6302.             DWORD    -> ASCIZ ???
  6303.             DWORD    ???
  6304.             DWORD    HKEY (see #3322)
  6305.         0109h "RegQueryValueEx"
  6306.         010Ah "RegSetValueEx"
  6307.         010Bh "RegFlushKey"
  6308.         010Ch "RegLoadKey"
  6309.         010Dh "RegUnLoadKey"
  6310.         010Eh "RegSaveKey"
  6311.         010Fh "RegRestore"
  6312.         0110h "RegRemapPreDefKey"
  6313. Return: parameters popped from stack
  6314.     DX:AX = return value
  6315.  
  6316. (Table 3322)
  6317. Values for Windows95 VMM predefined HKEY values:
  6318.  80000000h    HKEY_CLASSES_ROOT
  6319.  80000001h    HKEY_CURRENT_USER
  6320.  80000002h    HKEY_LOCAL_MACHINE
  6321.  80000003h    HKEY_USERS
  6322.  80000004h    HKEY_PERFORMANCE_DATA
  6323.  80000005h    HKEY_CURRENT_CONFIG
  6324.  80000006h    HKEY_DYN_DATA
  6325. SeeAlso: #3321
  6326. --------W-2F1684BX0003-----------------------
  6327. INT 2F - MS Windows - VPICD - GET API ENTRY POINT
  6328.     AX = 1684h
  6329.     BX = 0003h (virtual device ID for VPICD device) (see #1968)
  6330.     ES:DI = 0000h:0000h
  6331. Return: ES:DI -> VxD API entry point (see #3467)
  6332.           0000h:0000h if the VxD does not support an API
  6333. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6334.  
  6335. (Table 3467)
  6336. Call VPICD API entry point with:
  6337.     EAX = function number
  6338.         0000h get version
  6339.         Return: AX = binary version (AH=major, AL=minor)
  6340.         0001h virtualize timer???
  6341.         0002h unvirtualize timer???
  6342. --------W-2F1684BX0005-----------------------
  6343. INT 2F - MS Windows - VTD - GET API ENTRY POINT
  6344.     AX = 1684h
  6345.     BX = 0005h (virtual device ID for VTD device) (see #1968)
  6346.     ES:DI = 0000h:0000h
  6347. Return: ES:DI -> VxD API entry point (see #1969)
  6348.           0000h:0000h if the VxD does not support an API
  6349. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6350.  
  6351. (Table 1969)
  6352. Call VTD.386/VTD.VXD entry point with:
  6353.     AX = function number
  6354.         0000h get VTD version number
  6355.         Return: CF clear
  6356.             AH = major version
  6357.             AL = minor version
  6358.         0100h get current clock tick time
  6359.         Return: EDX:EAX = clock tick time in 840ns units since Windows
  6360.                   was started
  6361.         0101h get current system time in milliseconds
  6362.         Return: EAX = time in milliseconds that Windows has been
  6363.                   running
  6364.         0102h get current virtual machine time
  6365.         Return: EAX = cumulative amount of time the virtual machine has
  6366.                   been active, in milliseconds
  6367. Note:    this entry point should only be called directly when TOOLHELP.DLL
  6368.       TimerCount() cannot be called
  6369. SeeAlso: #0674,#0676,#0675 at INT 20"Windows"
  6370. --------W-2F1684BX0006-----------------------
  6371. INT 2F P - MS Windows95 - V86MMGR - GET API ENTRY POINT
  6372.     AX = 1684h
  6373.     BX = 0006h (virtual device ID for V86MMGR device) (see #1968)
  6374.     ES:DI = 0000h:0000h
  6375. Return: ES:DI -> VxD API entry point (see #3468)
  6376.           0000h:0000h if the VxD does not support API in current mode
  6377. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6378.  
  6379. (Table 3468)
  6380. Call V86MMGR entry point with:
  6381.     EAX = function number
  6382.         0000h get V86MMGR version
  6383.         Return: CF clear
  6384.             AH = major version
  6385.             AL = minor version
  6386.         0001h get ???
  6387.         Return: CF clear
  6388.             EAX = status bits
  6389.                 bit 0: ???
  6390.                 bit 1: ???
  6391.                 bit 2: ???
  6392.                 bit 3: ???
  6393.                 bit 4: ???
  6394.         else
  6395.         Return: CF set
  6396. --------W-2F1684BX0009-----------------------
  6397. INT 2F P - MS Windows - REBOOT - GET API ENTRY POINT
  6398.     AX = 1684h
  6399.     BX = 0009h (virtual device ID for REBOOT device) (see #1968)
  6400.     ES:DI = 0000h:0000h
  6401. Return: ES:DI -> VxD API entry point (see #1970)
  6402.           0000h:0000h if the VxD does not support an API
  6403. SeeAlso: INT 14/AH=17h"FOSSIL",INT 16/AX=E0FFh
  6404.  
  6405. (Table 1970)
  6406. Call REBOOT protected-mode entry point with:
  6407.     AX = function
  6408.         0100h warm boot
  6409.         Return: never
  6410.         Note:    broadcasts "Reboot_Processor" message, which is caught
  6411.               by the VKD device
  6412.         0201h set KERNEL Ctrl-Alt-Del handler
  6413.         ES:DI -> new Ctrl-Alt-Del handler
  6414.         DS:SI -> KERNEL reboot sanity check byte
  6415.         Return: CF clear
  6416.         Notes:    if an application installs its own handler and then
  6417.               chains to Windows' handler, Windows will no longer
  6418.               be able to detect hung applications, and will always
  6419.               produce an "Application not responding" dialog
  6420.             DS must contain a writable, fixed selector because
  6421.               the provided address is converted to a linear address
  6422.               before being stored
  6423.             when Ctrl-Alt-Del is pressed in the system VM, Reboot
  6424.               sets the sanity check byte to zero, schedules a
  6425.               750ms wait, and then tests whether the check byte is
  6426.               still zero; if not, it displays a message that there
  6427.               is no hung application and then exits
  6428.         0202h get KERNEL Ctrl-Alt-Del handler
  6429.         Return: CF clear
  6430.             ES:DI -> current Ctrl-Alt-Del handler
  6431.         Note:    the default handler is located in KERNEL
  6432.         0203h display "Application not responding" dialog box
  6433.         ES:DI -> ASCIZ name of hung application
  6434.         Return: never if user pressed Ctrl-Alt-Del a second time
  6435.             CF clear
  6436.             AX = result
  6437.                 0000h user pressed Esc
  6438.                 0001h user pressed Enter
  6439.         Note:    this function is used by the default Windows
  6440.               Ctrl-Alt-Del handler
  6441.         0204h set/reset protected-mode INT 01 handler
  6442.         CX:EDX -> new protected-mode INT 01 handler
  6443.         CX = 0000h restore protected-mode INT 01 handler
  6444.         Return: CF clear
  6445.         Notes:    if CX is nonzero, the current handler address is saved
  6446.               internally before the new handler is set; this saved
  6447.               address is then used when CX is zero on entry
  6448.             used by Windows' default Ctrl-Alt-Del handler; actual
  6449.               fatal exit to DOS will be done on next INT 01
  6450.         Warning: opened files are not closed and remain open as
  6451.               orphaned files in DOS
  6452. Note:    functions 0201h and 0203h are not useful outside the system VM
  6453. SeeAlso: #0677,#0678
  6454. --------W-2F1684BX000A-----------------------
  6455. INT 2F P - MS Windows - VDD - GET API ENTRY POINT
  6456.     AX = 1684h
  6457.     BX = 000Ah (virtual device ID for VDD device) (see #1968)
  6458.     ES:DI = 0000h:0000h
  6459. Return: ES:DI -> VxD API entry point (see #3469)
  6460.           0000h:0000h if the VxD does not support API in current mode
  6461. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6462.  
  6463. (Table 3469)
  6464. Call VDD entry point with:
  6465.     EAX = function
  6466.         0000h get VDD version
  6467.         Return: CF clear
  6468.             AH = major version
  6469.             AL = minor version
  6470.         Note:    also performs an internal initialization
  6471.         0001h ???
  6472.         Return: ECX = ???
  6473.             ???
  6474.         0002h
  6475.         0003h
  6476.         0004h
  6477.         0005h
  6478.         0006h
  6479.         0007h
  6480.         0008h
  6481.         0009h
  6482.         0080h
  6483.         0081h
  6484.         0082h
  6485.         0083h
  6486.         0084h
  6487.         0085h
  6488.         0086h
  6489.         0087h
  6490.         0088h
  6491.         0089h
  6492.         else
  6493.         Return: nothing
  6494. --------W-2F1684BX000C-----------------------
  6495. INT 2F - MS Windows - VMD - GET API ENTRY POINT
  6496.     AX = 1684h
  6497.     BX = 000Ch (virtual device ID for VMD device) (see #1968)
  6498.     ES:DI = 0000h:0000h
  6499. Return: ES:DI -> VxD API entry point (see #3470)
  6500.           0000h:0000h if the VxD does not support API in current mode
  6501. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6502.  
  6503. (Table 3470)
  6504. Call VMOUSE entry point with:
  6505.     EAX = function number
  6506.         0000h get VMOUSE version
  6507.         Return: CF clear
  6508.             AH = major version
  6509.             AL = minor version
  6510.         0001h
  6511.         EBX = ???
  6512.         ECX = ???
  6513.         Return: CF clear if successful
  6514.             CF set on error (e.g. fn 0003h not yet called)
  6515.         0002h ??? (calls "test system VM handle")
  6516.         Return: CF clear if successful (in system VM)
  6517.             CF set on error
  6518.         0003h ???
  6519.         ECX = ???
  6520.         DX = ???
  6521.         Return: CF clear
  6522.         0004h ???
  6523.         Note: invokes Call_Priority_VM_Event
  6524.         0005h get mouse port data
  6525.         Return: CF clear
  6526.             AL = ??? (04h)
  6527.             AH = mouse IRQ interrupt number (IRQ4=0Ch,etc.)
  6528.             CX = mouse I/O port address (e.g. 03F8h)
  6529.             DX = COM port number??? (0001h for mouse on COM1)
  6530.         0100h NOP???
  6531.         Return: CF clear
  6532.         0101h init???
  6533.         Return: CF clear
  6534.         Note:    appears to be the same as fn 0005h, but returns no data
  6535.         0102h unimplemented
  6536.         Return: CF set
  6537.         0103h check ???
  6538.         Return: AX = status (0000h/0001h)
  6539.         Note:    checks flag set by fn 0003h
  6540.         else
  6541.         Return: CF set
  6542. SeeAlso: #3469,#3471
  6543. --------W-2F1684BX000D-----------------------
  6544. INT 2F P - MS Windows - VKD - GET API ENTRY POINT
  6545.     AX = 1684h
  6546.     BX = 000Dh (virtual device ID for VKD device) (see #1968)
  6547.     ES:DI = 0000h:0000h
  6548. Return: ES:DI -> VxD API entry point (see #3471)
  6549.           0000h:0000h if the VxD does not support API in current mode
  6550. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6551.  
  6552. (Table 3471)
  6553. Call VKD entry point with:
  6554.     EAX = function
  6555.         0000h get VKD version
  6556.         Return: CF clear
  6557.             AH = major version
  6558.             AL = minor version
  6559.         0001h ???
  6560.         EBX = VM handle or 00000000h to use ??? VM handle
  6561.         CH = ???
  6562.         CL = ???
  6563.         EDX = ??? or FFFFFFFFh
  6564.         Return: CF clear if successful
  6565.             CF set on error
  6566.         else
  6567.         Return: CF set
  6568. SeeAlso: #3470,#3472
  6569. --------W-2F1684BX000E-----------------------
  6570. INT 2F P - MS Windows - VCD - GET API ENTRY POINT
  6571.     AX = 1684h
  6572.     BX = 000Eh (virtual device ID for VCD device) (see #1968)
  6573.     ES:DI = 0000h:0000h
  6574. Return: ES:DI -> VxD API entry point (see #3472)
  6575.           0000h:0000h if the VxD does not support API in current mode
  6576. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6577.  
  6578. (Table 3472)
  6579. Call VCD entry point with:
  6580.     EDX = function number
  6581.         0000h get VCD version
  6582.         Return: CF clear
  6583.             AH = major version
  6584.             AL = minor version
  6585.         0001h get ???
  6586.         Return: CF clear
  6587.             AX = bit mask of ???
  6588.         0002h get ???
  6589.         CX = COM port number
  6590.         Return: CF clear
  6591.             DX:AX -> ???
  6592.         0003h set ???
  6593.         CX = COM port number
  6594.         DX:AX -> new ???
  6595.         Return: CF clear
  6596.         0004h acquire COM port
  6597.         AX = ???
  6598.         CX = COM port number
  6599.         Return: CF clear
  6600.             AX = ???
  6601.             EBX = ???
  6602.             DX = ???
  6603.         0005h release COM port
  6604.         CX = COM port number
  6605.         Return: CF clear
  6606.         0006h ???
  6607.         Return: CF set
  6608.             AL = 00h
  6609.         else
  6610.         Return: CF set
  6611.             EAX = FFFFFFFFh
  6612. Note:    these functions are apparently only available from the system VM,
  6613.       returning CF set and EAX=FFFFFFFFh otherwise
  6614. SeeAlso: #3471,#3473
  6615. --------W-2F1684BX000F-----------------------
  6616. INT 2F P - MS Windows - VPD - GET API ENTRY POINT
  6617.     AX = 1684h
  6618.     BX = 000Fh (virtual device ID for VPD device) (see #1968)
  6619.     ES:DI = 0000h:0000h
  6620. Return: ES:DI -> VxD API entry point (see #3473)
  6621.           0000h:0000h if the VxD does not support API in current mode
  6622. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6623.  
  6624. (Table 3473)
  6625. Call VPD entry point with:
  6626.     EDX = function number
  6627.         0000h get VPD version
  6628.         Return: CF clear
  6629.             AH = major version
  6630.             AL = minor version
  6631.             DX = ??? (CB01h)
  6632.         0001h get valid??? printers
  6633.         Return: CF clear
  6634.             AX = bitmask of ??? printers (bits 0-2)
  6635.         0002h get ??? for printer
  6636.         CX = printer port (0-2)
  6637.         Return: CF clear if successful
  6638.                 BX:AX = ???
  6639.             CF set on error (invalid port number)
  6640.         0003h set ??? for printer
  6641.         CX = printer port (0-2)
  6642.         BX:AX = ???
  6643.         Return:    CF clear if successful
  6644.             CF set on error (invalid port number)
  6645.         0004h ???
  6646.         CX = printer port (0-2)
  6647.         EAX = VM handle
  6648.         Return:    CF clear if successful
  6649.             CF set on error (invalid port number)
  6650.         0005h ???
  6651.         CX = printer port (0-2)
  6652.         EAX = VM handle
  6653.         Return:    CF clear if successful
  6654.             CF set on error (invalid port number or ???)
  6655.         0006h-000Eh unused
  6656.         Return: CF set
  6657.         000Fh ???
  6658.         CX = printer port (0-2)
  6659.         AX = ???
  6660.         Return:    CF clear if successful
  6661.             CF set on error (e.g. invalid port number)
  6662.         0010h ???
  6663.         CX = printer port (0-2)
  6664.         Return:    CF clear if successful
  6665.             CF set on error (e.g. invalid port number)
  6666.         0011h ???
  6667.         CX = printer port (0-2)
  6668.         Return:    CF clear if successful
  6669.             CF set on error (e.g. invalid port number)
  6670.         0012h get port status
  6671.         CX = printer port (0-2)
  6672.         Return:    CF clear if successful
  6673.                 AX = port status (see #P150 at PORT 03BCh"LPT")
  6674.             CF set on error (e.g. invalid port number)
  6675.         else
  6676.         Return: CF set
  6677. Note:    these functions are apparently only available from the system VM,
  6678.       returning CF set
  6679. SeeAlso: #3472,#3474
  6680. --------W-2F1684BX0010-----------------------
  6681. INT 2F - MS Windows - IOS - GET API ENTRY POINT
  6682.     AX = 1684h
  6683.     BX = 0010h (virtual device ID for IOS device) (see #1968)
  6684.     ES:DI = 0000h:0000h
  6685. Return: ES:DI -> VxD API entry point (see #3474)
  6686.           0000h:0000h if the VxD does not support API in current mode
  6687. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6688.  
  6689. (Table 3474)
  6690. Call IOS entry point with:
  6691.     EAX = function number
  6692.         0000h ???
  6693.         Return: CF clear if successful
  6694.                 AX = 0000h
  6695.             CF set on error
  6696.                 AX = FFFFh
  6697.         0001h check if ???
  6698.         Return: CF clear if successful
  6699.                 AX = 0000h
  6700.             CF set on error
  6701.                 AX = FFFFh
  6702.         0002h requestor services???
  6703.         DL = service number???
  6704.         Return: CF clear if successful
  6705.                 AX = 0000h
  6706.                 DX = ???
  6707.             CF set on error
  6708.                 AX = FFFFh
  6709.         Note:    calls "IOS_Requestor_Service" (see INT 20"Windows")
  6710.         0003h ??? (copies five bytes of data internally)
  6711.         Return: CF clear if successful
  6712.                 AX = 0000h
  6713.                 EDX = ???
  6714.             CF set on error
  6715.                 AX = FFFFh
  6716.         else
  6717.         Return: CF set
  6718.             AX = FFFFh
  6719. SeeAlso: #3473,#3475
  6720. --------W-2F1684BX0011-----------------------
  6721. INT 2F - MS Windows - VMCPD - GET API ENTRY POINT
  6722.     AX = 1684h
  6723.     BX = 0011h (virtual device ID for VMCPD device) (see #1968)
  6724.     ES:DI = 0000h:0000h
  6725. Return: ES:DI -> VxD API entry point (see #3475)
  6726.           0000h:0000h if the VxD does not support API in current mode
  6727. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6728.  
  6729. (Table 3475)
  6730. Call Windows95 VMCPD protected-mode entry point with:
  6731.     EAX = function number
  6732.         0000h get VMCPD version
  6733.         Return: CF clear
  6734.             AH = major version
  6735.             AL = minor version
  6736.         0001h get ??? flags
  6737.         Return: CF clear
  6738.             AX = ??? flags
  6739.                 bit 0: ???
  6740.                 bit 1: ???
  6741.                 bit 2: ???
  6742.                 bit 3: ???
  6743.         else
  6744.         Return: CF set
  6745. SeeAlso: #3474,#1971
  6746. --------W-2F1684BX0015-----------------------
  6747. INT 2F - MS Windows - DOSMGR - GET API ENTRY POINT
  6748.     AX = 1684h
  6749.     BX = 0015h (virtual device ID for DOSMGR device) (see #1968)
  6750.     ES:DI = 0000h:0000h
  6751. Return: ES:DI -> VxD API entry point (see #1971,#0686)
  6752.           0000h:0000h if the VxD does not support an API
  6753. SeeAlso: #0686 at INT 20"Windows"
  6754.  
  6755. (Table 1971)
  6756. Call DOSMGR entry point with:
  6757.     AX = 0000h get DOSMGR version
  6758.         Return: CF clear
  6759.             AX = version (AH = major, AL = minor)
  6760.     AX = 0001h set critical focus
  6761.         Return: CF clear
  6762.     AX = 0002h crash current virtual machine
  6763.         Return: never
  6764.         Note:   displays message box stating that "application has been
  6765.               stopped by the DOSMGR device"
  6766.     AX = 0003h enter critical section
  6767.         Note:   this function assumes that the code for INT 2A/AX=8001h
  6768.               and INT 2A/AX=8002h have been modified for Windows
  6769.     AX = 0004h get VM ID byte
  6770.         Return: CF clear if successful
  6771.             ES:DI -> VM ID byte
  6772.             CF set on error
  6773.         Note:   this function fails if the INT 2A modifications have not
  6774.               yet been applied
  6775.     AX = 0005h inform Windows of possible media change
  6776.         BL = drive number (00h=A:)
  6777.         Return: CF clear if successful
  6778.             CF set on error
  6779. SeeAlso: #0686 at INT 20"Windows",#3475,#1972
  6780. --------W-2F1684BX0017-----------------------
  6781. INT 2F U - MS Windows - SHELL - GET API ENTRY POINT
  6782.     AX = 1684h
  6783.     BX = 0017h (virtual device ID for SHELL device) (see #1968)
  6784.     ES:DI = 0000h:0000h
  6785. Return: ES:DI -> VxD API entry point (see #1972)
  6786.           0000h:0000h if the VxD does not support an API
  6787. SeeAlso: AX=1684h/BX=0021h,#0687 at INT 20"Windows"
  6788.  
  6789. (Table 1972)
  6790. Call SHELL entry point with:
  6791.     EDX = function number (0000h-0027h,0100h-0108h, mostly unknown)
  6792.         0000h get version number
  6793.         Return: AX = version number
  6794.             EBX = system VM handle
  6795.         0001h "SHELL_Get_SYSVM_Info" get system VM information
  6796.         Return: CF clear
  6797.             AX bit 0 set if system VM executing exclusively
  6798.             BX = background time slice priority
  6799.             CX = foreground time slice priority
  6800.             SI = minimum time slice in milliseconds
  6801.         0002h "SHELL_Set_SYSVM_Info" set system VM information
  6802.         AX bit 0 set if system VM should execute exclusively (ignored?)
  6803.         BX = background time slice priority (1-10000)
  6804.         CX = foreground time slice priority (1-10000)
  6805.         SI = minimum time slice in milliseconds (1-10000)
  6806.         Return: CF clear if successful
  6807.         0003h "SHELL_Crt_VM" create a virtual machine
  6808.         ES:EDI -> SEB structure (see #1973)
  6809.         Return: CF clear if successful
  6810.                EAX = VM handle
  6811.             CF set on error
  6812.                EDX,EAX = result from GetSetDetailedVMError()
  6813.         0004h "SHELL_Destroy_VM" destroy a virtual machine
  6814.         EBX = VM handle (not system VM)
  6815.         Return: nothing
  6816.         0005h "SHELL_Set_Focus"
  6817.         EBX = VM handle
  6818.         ECX = ???
  6819.         Return: nothing
  6820.         0006h "SHELL_Get_VM_State"
  6821.         EBX = VM handle (not system VM)
  6822.         ES:EDI -> ??? structure
  6823.         Return: CF clear if successful
  6824.         0007h "SHELL_Set_VM_State"
  6825.         EBX = VM handle (not system VM)
  6826.         ES:EDI -> ??? structure
  6827.         0008h "SHELL_Debug_Out"
  6828.         ???
  6829.         Return: ???
  6830.         Note:    dummy function in retail version of MS Windows
  6831.         0009h "SHELL_VMDA_Init"
  6832.         ???
  6833.         Return: ???
  6834.         000Ah "SHELL_VMDA_Exit"
  6835.         ???
  6836.         Return: ???
  6837.         000Bh "SHELL_Get_Message_Txt"
  6838.         ???
  6839.         Return: ???
  6840.         000Ch "SHELL_Event_Complete"
  6841.         ???
  6842.         Return: ???
  6843.         000Dh "SHELL_Get_Contention_Info"
  6844.         ???
  6845.         Return: ???
  6846.         000Eh "SHELL_Get_Clip_Info"
  6847.         ???
  6848.         Return: ???
  6849.         000Fh "SHELL_Set_Paste"
  6850.         ???
  6851.         Return: ???
  6852.         0010h "SHELL_Switcher_Assist"
  6853.         ???
  6854.         Return: ???
  6855.         0011h "SHELL_Get_FileSysChng"
  6856.         ???
  6857.         Return: ???
  6858.         0012h "SHELL_Query_Destroy"
  6859.         ???
  6860.         Return: ???
  6861.         0013h "SHELL_SetFocus_Cur_VM" set input focus to current VM
  6862.         ???
  6863.         Return: ???
  6864.         0014h "SHELL_User_Busy_API"
  6865.         ???
  6866.         Return: ???
  6867.         0015h "SHELL_Chng_Hot_Key"
  6868.         ???
  6869.         Return: ???
  6870.         0016h "SHELL_Get_TermInfo"
  6871.         ???
  6872.         Return: ???
  6873.         ---Windows95---
  6874.         0017h ???
  6875.         0018h ???
  6876.         0019h ???
  6877.         001Ah ???
  6878.         001Bh ???
  6879.         001Ch ???
  6880.         001Dh ???
  6881.         001Eh ???
  6882.         001Fh ???
  6883.         0020h ???
  6884.         0021h ???
  6885.         0022h ???
  6886.         0023h ???
  6887.         0024h ???
  6888.         0025h ???
  6889.         0026h ???
  6890.         Note:    makes VxDCALL 00178002h (see INT 20"Windows")
  6891.         0027h ???
  6892.         0100h get ??? version
  6893.         Return: AX = version??? (0400h for Windows95)
  6894.         0101h not implemented
  6895.         Return: CF set
  6896.             EAX = FFFFFFFFh
  6897.         0102h not implemented
  6898.         Return: CF set
  6899.             EAX = FFFFFFFFh
  6900.         0103h not implemented
  6901.         Return: CF set
  6902.             EAX = FFFFFFFFh
  6903.         0104h ???
  6904.         0105h ???
  6905.         0106h ???
  6906.         ???
  6907.         Return: CF clear if successful
  6908.             CF set on error
  6909.         0107h get SDK version for VxD
  6910.         AX = VxD identifier
  6911.         Return: EAX = VxD ID (high word) and SDK version (low)
  6912.                 00000000h if no such VxD loaded
  6913.         Note:    makes a VMMCALL 0001013Fh (see INT 20"Windows")
  6914.               followed by ???
  6915.         0108h ???
  6916. Return: CF set if called from VM other than system VM
  6917.         EAX = FFFFFFFFh
  6918. Note:    except for functions 0013h,0026h,and 010xh, this API may only be
  6919.       called from the system VM
  6920. SeeAlso: #0687 at INT 20"Windows"
  6921.  
  6922. Format of Shell Execution Block (SEB):
  6923. Offset    Size    Description    (Table 1973)
  6924.  00h    DWORD    PIF flags (see #1974)
  6925.  04h    DWORD    display flags (see #1975)
  6926.  08h    PWORD    -> pathname of .EXE to run
  6927.  0Eh    PWORD    -> argument list
  6928.  14h    PWORD    -> working drive/directory
  6929.  1Ah    WORD    desired number of V86 pages for virtual machine
  6930.  1Ch    WORD    minimum number of V86 pages for VM
  6931.  1Eh    WORD    foreground priority
  6932.  20h    WORD    background priority
  6933.  22h    WORD    maximum KB of EMS
  6934.  24h    WORD    minimum KB of EMS
  6935.  26h    WORD    maximum KB of XMS
  6936.  28h    WORD    minimum KB of XMS
  6937.  2Ah    WORD    maximum KB of DPMI???
  6938.  2Ch    WORD    minimum KB of DPMI???
  6939.  2Eh 128 BYTEs    title
  6940. Note:    the PWORDs at offsets 08h,0Eh, and 14h consist of a DWORD offset
  6941.       followed by a WORD selector
  6942.  
  6943. Bitfields for 386 Enhanced Mode PIF flags:
  6944. Bit(s)    Description    (Table 1974)
  6945.  0    exclusive use of processor when VM is fullscreen
  6946.  1    VM runs in background
  6947.  2    VM runs in window
  6948.  3-4    ???
  6949.  5    Alt-Tab reserved
  6950.  6    Alt-Esc reserved
  6951.  7    Alt-Space reserved
  6952.  8    Alt-Enter reserved
  6953.  9    Alt-PrtSc reserved
  6954.  10    PrtSc reserved
  6955.  11    Ctrl-Esc reserved
  6956.  12    VM will release idle time slice
  6957.  13    VM not allowed to use high memory
  6958.  14    ???
  6959.  15    VM expanded memory not pageable
  6960.  16    VM extended memory not pageable
  6961.  17    Fast paste from clipboard enabled
  6962.  18    VM application memory not pageable
  6963.  30    Close VM when application exits
  6964. SeeAlso: #1973,#1975
  6965.  
  6966. Bitfields for SHELL display options:
  6967. Bit(s)    Description    (Table 1975)
  6968.  0    emulate text mode
  6969.  1    monitor text port
  6970.  2    monitor low graphics port
  6971.  3    monitor high graphics port
  6972.  7    Retain video memory
  6973. SeeAlso: #1973,#1974
  6974. --------W-2F1684BX001A-----------------------
  6975. INT 2F - MS Windows - VNETWARE - GET API ENTRY POINT
  6976.     AX = 1684h
  6977.     BX = 001Ah (virtual device ID for VNETWARE device) (see #1968)
  6978.     ES:DI = 0000h:0000h
  6979. Return: ES:DI -> VxD API entry point
  6980.           0000h:0000h if the VxD does not support API in current mode
  6981. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6982. --------W-2F1684BX001D-----------------------
  6983. INT 2F P - MS Windows - WINDEBUG - GET API ENTRY POINT
  6984.     AX = 1684h
  6985.     BX = 001Dh (virtual device ID for WINDEBUG device) (see #1968)
  6986.     ES:DI = 0000h:0000h
  6987. Return: ES:DI -> VxD API entry point
  6988.           0000h:0000h if the VxD does not support API in current mode
  6989. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6990. --------W-2F1684BX0021-----------------------
  6991. INT 2F PU - MS Windows - PAGEFILE - GET API ENTRY POINT
  6992.     AX = 1684h
  6993.     BX = 0021h (virtual device ID for PAGEFILE device) (see #1968)
  6994.     ES:DI = 0000h:0000h
  6995. Return: ES:DI -> VxD API entry point (see #1976)
  6996.           0000h:0000h if the VxD does not support an API
  6997. SeeAlso: AX=1684h/BX=0017h,#0691 at INT 20"Windows"
  6998.  
  6999. (Table 1976)
  7000. Call PAGEFILE entry point with:
  7001.     AX = function
  7002.         0000h get version
  7003.         Return: CF clear
  7004.             AX = version (AH = major, AL = minor)
  7005.         0001h get swap file info
  7006.         DS:SI -> 128-byte buffer for swap file full pathname
  7007.         DS:DI -> 128-byte buffer for SPART.PAR full pathname
  7008.         Return: CF clear
  7009.             AL = pager type (see #1977)
  7010.             AH = flags
  7011.                 bit 7: swap file corrupted
  7012.             ECX = maximum size of swap file
  7013.             DS:SI buffer filled if paging enabled
  7014.             DS:DI buffer filled if permanent swap file
  7015.         0002h delete permanent swap file on exit
  7016.         Return: CF clear
  7017.         0003h get current temporary swap file size
  7018.         Return: CF clear
  7019.             DX:AX = current swap file size in bytes
  7020.                 0000h:0000h if permanent swap file
  7021. Note:    this API is only available in protected mode, and may only be called
  7022.       from the system VM
  7023. SeeAlso: #0691 at INT 20"Windows",#3476
  7024.  
  7025. (Table 1977)
  7026. Values for MS Windows PAGEFILE pager type:
  7027.  00h    paging disabled
  7028.  01h    MSDOS
  7029.  02h    BIOS
  7030.  03h    32-bit disk access
  7031. SeeAlso: #1976
  7032. --------W-2F1684BX0022-----------------------
  7033. INT 2F P - MS Windows - APIX - GET API ENTRY POINT
  7034.     AX = 1684h
  7035.     BX = 0022h (virtual device ID for APIX device) (see #1968)
  7036.     ES:DI = 0000h:0000h
  7037. Return: ES:DI -> VxD API entry point (see #3476)
  7038.           0000h:0000h if the VxD does not support API in current mode
  7039. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7040.  
  7041. (Table 3476)
  7042. Call APIX protected-mode entry point with:
  7043.     AH = function number
  7044.         00h get APIX version
  7045.         Return: CF clear
  7046.             AH = major version
  7047.             AL = minor version
  7048.         01h ???
  7049.         Return: CF clear
  7050.             AX = number of ???
  7051.         02h NOP
  7052.         Return: CF clear
  7053.         03h ???
  7054.         Return: CF clear
  7055.             AX = 0000h/FFFFh
  7056.         else
  7057.         Return: CF clear (bug?)
  7058. SeeAlso: #1976,#3477
  7059. --------W-2F1684BX0026-----------------------
  7060. INT 2F P - MS Windows - VPOWERD - GET API ENTRY POINT
  7061.     AX = 1684h
  7062.     BX = 0026h (virtual device ID for VPOWERD device) (see #1968)
  7063.     ES:DI = 0000h:0000h
  7064. Return: ES:DI -> VxD API entry point (see #3504)
  7065.           0000h:0000h if the VxD does not support API in current mode
  7066. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7067.  
  7068. (Table 3504)
  7069. Call VPOWERD.VXD entry point with:
  7070.     AX = function number
  7071.         0000h get VPOWERD version
  7072.         Return: DX = 0000h
  7073.             AX = version (AH = major, AL = minor)
  7074.         0001h get APM BIOS version
  7075.         Return: DX:AX = APM BIOS version
  7076.         0002h get current power management level
  7077.         Return: DX:AX = power management level
  7078.         0003h enable/disable power management (see INT 15/AX=5308h)
  7079.         ??? = new state of power management
  7080.         Return: DX:AX = 0000h:0000h if successful
  7081.                else error code (see #3506)
  7082.         0004h set power state (see INT 15/AX=5307h)
  7083.         Return: DX:AX = 0000h:0000h if successful
  7084.                else error code (see #3506)
  7085.         0005h set system power status
  7086.         Return: DX:AX = 0000h:0000h if successful
  7087.                else error code (see #3506)
  7088.         0006h restore APM power-on defaults (see INT 15/AX=5309h)
  7089.         Return: DX:AX = 0000h:0000h if successful
  7090.                else error code (see #3506)
  7091.         0007h get power status (see INT 15/AX=530Ah)
  7092.         Return: ???
  7093.         0008h get APM 1.1 power state (see INT 15/AX=530Ch)
  7094.         Return: ???
  7095.         0009h invoke OEM APM function
  7096.         ??? -> buffer containing parameters for INT 15/AX=5380h
  7097.         Return: DX:AX = 0000h:0000h or error code (see #3506)
  7098.             buffer updated if successful
  7099.         000Ah register power handler
  7100.         ???
  7101.         Return: DX:AX = 0000h:0000h or error code
  7102.         000Bh deregister power handler
  7103.         ???
  7104.         Return: DX:AX = 0000h:0000h or error code (see #3506)
  7105.         000Ch Win32 get system power status
  7106.         000Dh Win32 set system power status
  7107.         else
  7108.         Return: DX = 0000h
  7109.             AX = 00FFh
  7110. SeeAlso: #3476,#3477
  7111.  
  7112. (Table 3506)
  7113. Values for VPOWERD.VXD error code:
  7114.  000000xxh    APM error code
  7115.  000000FFh    function number out of range
  7116.  80000001h    ??? (service 05h)
  7117.  80000002h    ??? (service 0Dh)
  7118.  80000003h    specified NULL buffer pointer (service 07h,08h,09h)
  7119.  80000005h    ??? (service 03h)
  7120.  80000006h    ??? (service 04h)
  7121.  80000007h    ??? (service 05h)
  7122.  80000008h    ??? (service 05h)
  7123.  80000009h    out of memory (service 0Ah)
  7124.  8000000Ah    ??? (service 0Ah)
  7125.  8000000Bh    invalid power handler (service 0Bh)
  7126.  8000000Ch    unsupported/disabled??? function
  7127. SeeAlso: #3504,#3505
  7128. --------W-2F1684BX0027-----------------------
  7129. INT 2F - MS Windows95 - VXDLDR - GET API ENTRY POINT
  7130.     AX = 1684h
  7131.     BX = 0027h (virtual device ID for VXDLDR device) (see #1968)
  7132.     ES:DI = 0000h:0000h
  7133. Return: ES:DI -> VxD API entry point (see #3477)
  7134.           0000h:0000h if the VxD does not support API in current mode
  7135. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7136.  
  7137. (Table 3477)
  7138. Call VXDLDR entry point with:
  7139.     EAX = function number
  7140.         0000h get VXDLDR version
  7141.         Return: CF clear
  7142.             AX = 0000h (successful)
  7143.             DH = major version
  7144.             DL = minor version
  7145.         0001h load device
  7146.         ???
  7147.         Return: CF clear if successful
  7148.                 AX = 0000h
  7149.             CF set on error
  7150.                 AX = error code (see #3478)
  7151.         0002h unload device
  7152.         BX = ???
  7153.         Return: CF clear if successful
  7154.                 AX = 0000h
  7155.             CF set on error
  7156.                 AX = error code (see #3478)
  7157.         else
  7158.         Return: CF set
  7159.             AX = 000Bh
  7160. SeeAlso: #3504,#3479
  7161.  
  7162. (Table 3478)
  7163. Values for VXDLDR error code:
  7164.  0000h    successful
  7165.  000Bh    invalid function number
  7166. SeeAlso: #3477
  7167. --------W-2F1684BX0028-----------------------
  7168. INT 2F - MS Windows - NDIS - GET API ENTRY POINT
  7169.     AX = 1684h
  7170.     BX = 0028h (virtual device ID for NDIS device) (see #1968)
  7171.     ES:DI = 0000h:0000h
  7172. Return: ES:DI -> VxD API entry point (see #3479)
  7173.           0000h:0000h if the VxD does not support API in current mode
  7174. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7175.  
  7176. (Table 3479)
  7177. Call NDIS.VXD entry point with:
  7178.     ??? = function number
  7179.         0000h set ??? to ???
  7180.         ??? = new ???
  7181.         Return: DX:AX = 0000h:0001h
  7182.         0002h ???
  7183.         ???
  7184.         Return: DX:AX -> ???
  7185.         0003h reset ??? to default
  7186.         Return: DX:AX = 0000h:0001h
  7187.         else
  7188.         Return: DX:AX = 0000h:0000h
  7189. SeeAlso: #3477,#3480
  7190. --------W-2F1684BX002A-----------------------
  7191. INT 2F P - MS Windows - VWIN32 - GET API ENTRY POINT
  7192.     AX = 1684h
  7193.     BX = 002Ah (virtual device ID for VWIN32 device) (see #1968)
  7194.     ES:DI = 0000h:0000h
  7195. Return: ES:DI -> VxD API entry point (see #3480)
  7196.           0000h:0000h if the VxD does not support API in current mode
  7197. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7198.  
  7199. (Table 3480)
  7200. Call VWIN32.VXD entry point with:
  7201.     AH = function number
  7202.         00h get VWIN32 version and ???
  7203.         Return: CF clear
  7204.             AH = major version
  7205.             AL = minor version
  7206.             EDX = ???
  7207.         01h ???
  7208.         EBX = ???
  7209.         ECX = ???
  7210.         Return: CF clear
  7211.             EAX = ???
  7212.         02h ???
  7213.         Return: CF clear
  7214.             AX = ??? or 0000h
  7215.         03h address allocation
  7216.         DS:??? -> buffer containing/for page data
  7217.         ECX = length of buffer
  7218.         AL = subfunction
  7219.             00h reserve page(s)
  7220.             01h commit page(s)
  7221.             02h decommit page(s)
  7222.             03h free page(s)
  7223.         Return: CF clear if successful
  7224.             CF set on error
  7225.         Note:    this function uses ECX bytes of stack
  7226.         04h get ???
  7227.         Return: CF clear
  7228.             EAX = ???
  7229.         05h ???
  7230.         EBX = ???
  7231.         Return: CF clear
  7232.             EAX = ???
  7233.         06h ???
  7234.         EBX = ???
  7235.         Return: CF clear
  7236.             EAX = ???
  7237.         07h ???
  7238.         EBX = ???
  7239.         Return: CF clear
  7240.             EAX = ???
  7241.         08h get ???
  7242.         Return: CF clear
  7243.             AX = ???
  7244.         09h ???
  7245.         EBX = ???
  7246.         ECX = ???
  7247.         Return: CF clear
  7248.         0Ah ???
  7249.         EBX = ???
  7250.         Return: CF clear
  7251.         0Bh ???
  7252.         EBX = ???
  7253.         Return: CF clear
  7254.         0Ch ???
  7255.         EBX = ???
  7256.         ECX = ???
  7257.         EDX = ???
  7258.         ???
  7259.         Return: CF clear if successful
  7260.                 EAX = ???
  7261.             CF set on error
  7262.         0Dh clear ???
  7263.         Return: CF clear
  7264.         0Eh ???
  7265.         EBX = ???
  7266.         ECX = ???
  7267.         Return: CF clear
  7268.         0Fh ???
  7269.         EBX = ???
  7270.         ECX = ???
  7271.         Return: CF clear
  7272.         10h ???
  7273.         Return: CF clear
  7274.         Note:    invokes VMMcall 00010184h
  7275.         11h ???
  7276.         Return: CF clear
  7277.         Note:    invokes VMMcall 00010160h
  7278.         12h ???
  7279.         ???
  7280.         13h pop up system error dialogue
  7281.         Return: CF clear
  7282.             AX = ??? or 0000h
  7283.         14h "IFSMgr_GetConversionTablePtrs"
  7284.         Return:    CF clear
  7285.             DX:AX -> ???
  7286.         Note:    invokes VxDcall 00400051h
  7287.         15h "Boost_With_Decay"
  7288.         EBX = ???
  7289.         ECX = ???
  7290.         EDX = ???
  7291.         Return: CF clear
  7292.         else
  7293.         Return: CF set
  7294. SeeAlso: #3479,#3481
  7295. --------W-2F1684BX002B-----------------------
  7296. INT 2F - MS Windows - VCOMM - GET API ENTRY POINT
  7297.     AX = 1684h
  7298.     BX = 002Bh (virtual device ID for VCOMM device) (see #1968)
  7299.     ES:DI = 0000h:0000h
  7300. Return: ES:DI -> VxD API entry point (see #3481)
  7301.           0000h:0000h if the VxD does not support API in current mode
  7302. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7303.  
  7304. (Table 3481)
  7305. Call VCOMM.VXD entry point with:
  7306.     AX = function number
  7307.         0000h open COM/LPT port
  7308.         BX = port number (00h-7Fh = COMx, 80h-FFh = LPTx)
  7309.         Return: DX:AX = ???
  7310.         0001h set comm state
  7311.         ???
  7312.         Return: AX = ???
  7313.         0002h setup comm port
  7314.         ???
  7315.         Return: AX = status (0000h failed, FFFFh success)
  7316.         0003h transmit character
  7317.         EBX = handle???
  7318.         ECX = ???
  7319.         Return: AX = status???
  7320.         0004h close comm port
  7321.         EBX = handle???
  7322.         Return: ???
  7323.         0005h clear comm error
  7324.         EBX = handle???
  7325.         EAX = ???
  7326.         Return: AX = status???
  7327.         0006h "EscapeCommFunction"
  7328.         EBX = handle???
  7329.         ECX = ???
  7330.         EAX = ???
  7331.         Return: DX:AX = ???
  7332.         0007h purge buffers
  7333.         EBX = handle???
  7334.         CX = ???
  7335.         Return: AX = status???
  7336.         0008h set comm event mask
  7337.         EBX = handle???
  7338.         CX = new event mask
  7339.         Return: AX = status???
  7340.         0009h get comm event mask
  7341.         EBX = handle???
  7342.         Return: AX = current event mask
  7343.         000Ah ???
  7344.         EBX = handle???
  7345.         Return: ???
  7346.         000Bh "WriteComm"
  7347.         EBX = handle???
  7348.         ECX = number of characters to write
  7349.         Return: AX = status
  7350.             EAX high word may be destroyed
  7351.         000Ch "ReadComm"
  7352.         EBX = handle???
  7353.         ECX = number of bytes to read
  7354.         Return: AX = status ???
  7355.             ZF = ???
  7356.         000Dh set ??? callback
  7357.         EBX = handle???
  7358.         ECX = ???
  7359.         EDX = ???
  7360.         Return: AX = status???
  7361.         else
  7362.         Return: AX = 0000h
  7363. SeeAlso: #3480,#3507
  7364. --------W-2F1684BX002D-----------------------
  7365. INT 2F P - MS Windows - W32S - GET API ENTRY POINT
  7366.     AX = 1684h
  7367.     BX = 002Dh (virtual device ID for W32S device) (see #1968)
  7368.     ES:DI = 0000h:0000h
  7369. Return: ES:DI -> VxD API entry point
  7370.           0000h:0000h if the VxD does not support API in current mode
  7371. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7372. --------W-2F1684BX0027-----------------------
  7373. INT 2F P - MS Windows - MACH32 - GET API ENTRY POINT
  7374.     AX = 1684h
  7375.     BX = 0030h (virtual device ID for MACH32 device) (see #1968)
  7376.     ES:DI = 0000h:0000h
  7377. Return: ES:DI -> VxD API entry point
  7378.           0000h:0000h if the VxD does not support API in current mode
  7379. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7380. --------W-2F1684BX0032-----------------------
  7381. INT 2F - MS Windows - SERVER / VSERVER - GET API ENTRY POINT
  7382.     AX = 1684h
  7383.     BX = 0032h (virtual device ID for SERVER device) (see #1968)
  7384.     ES:DI = 0000h:0000h
  7385. Return: ES:DI -> VxD API entry point (see #3507)
  7386.           0000h:0000h if the VxD does not support API in current mode
  7387. SeeAlso: AX=1684h"DEVICE API",#3389 at INT 20"Windows"
  7388.  
  7389. (Table 3507)
  7390. Call Windows95 VSERVER.VXD protected-mode entry point with:
  7391.     AX = function number
  7392.         0003h NOP
  7393.         Return: AX = 0000h
  7394.         0004h NOP
  7395.         Return: AX = 0000h
  7396.         0007h NOP
  7397.         Return: AX = 0000h
  7398.         0008h NOP
  7399.         Return: nothing
  7400.         000Fh ???
  7401.         Return: AX = status
  7402.                 0000h successful
  7403.                 0842h on error
  7404.         0010h ???
  7405.         Return: AX = status
  7406.                 0000h successful
  7407.                 0842h on error
  7408.         else
  7409.         Return: AX = 0032h
  7410. SeeAlso: #3481,#3482
  7411. --------W-2F1684BX0033-----------------------
  7412. INT 2F - MS Windows - CONFIGMG - GET API ENTRY POINT
  7413.     AX = 1684h
  7414.     BX = 0033h (virtual device ID for CONFIGMG device) (see #1968)
  7415.     ES:DI = 0000h:0000h
  7416. Return: ES:DI -> VxD API entry point (see #3482)
  7417.           0000h:0000h if the VxD does not support API in current mode
  7418. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7419.  
  7420. (Table 3482)
  7421. Call CONFIGMG.VXD entry point with:
  7422.     AX = function number
  7423.         0000h get CONFIGMG version
  7424.         Return: CF clear
  7425.             AH = major version
  7426.             AL = minor version
  7427.         ...
  7428.         005Ah
  7429.         else
  7430.         Return: CF set
  7431.             AX = 0020h
  7432. SeeAlso: #3357 at INT 20"Windows",#3507,#1978
  7433. --------x-2F1684BX0034-----------------------
  7434. INT 2F - Intel Plug-and-Play - CONFIGURATION MANAGER - GET ENTRY POINT
  7435.     AX = 1684h
  7436.     BX = 0034h (ID for Configuration Manager) (see #1968)
  7437.     ES:DI = 0000h:0000h
  7438. Return: ES:DI -> API entry point (see #1978)
  7439.           0000h:0000h if Configuration Manager not loaded
  7440. Note:    this API is often provided by a DOS device driver, in which case it
  7441.       is available whether or not MSWindows is running
  7442. Index:    installation check;Plug-and-Play Configuration Manager
  7443. SeeAlso: AX=1684h/BX=304Ch
  7444.  
  7445. (Table 1978)
  7446. Call Configuration Manager entry point with:
  7447.     AX = function
  7448.         0000h "CM_GetVersion" get supported DDI version
  7449.         Return: AH = BCD major version
  7450.             AL = BCD minor version
  7451.             BX = number of devices identified by configuration
  7452.         Note:    returns AX = 0000h if no config manager installed
  7453.         0001h "CM_GetConfig" get device configuration
  7454.         BX = device index
  7455.         ES:DI -> buffer for configuration information (see #1980)
  7456.         Return: AX = status
  7457.                 0000h successful
  7458.                 ES:DI buffer filled
  7459.                 other error code (0001h = index out of range)
  7460.         0002h "CM_LockConfig" lock device configuration
  7461.         ES:DI -> configuration information (see #1980)
  7462.         Return: AX = status
  7463.                 0000h successful
  7464.                 ES:DI buffer filled with assigned config
  7465.                 0001h resources conflict
  7466.                 0002h invalid request or configuration info
  7467.         0003h "CM_UnlockConfig" unlock device configuration
  7468.         ES:DI -> configuration information (see #1980)
  7469.         Return: AX = status
  7470.                 0000h successful
  7471.                 ES:DI buffer filled with assigned config
  7472.                 0001h invalid request or configuration info
  7473.         0004h "CME_QueryResources" get hot-swappable resources
  7474.         ES:DI -> configuration information (see #1980)
  7475.         Return: AX = status (see #1979)
  7476.         0005h "CME_AllocResources" remove resources from available pool
  7477.         ES:DI -> configuration information (see #1980)
  7478.         Return: AX = status (see #1979)
  7479.         0006h "CME_DeallocResources" return resources to available pool
  7480.         ES:DI -> configuration information (see #1980)
  7481.         Return: AX = status (see #1979)
  7482. SeeAlso: #3461 at INT 20"Windows",#3482,#3483
  7483.  
  7484. (Table 1979)
  7485. Values for Configuration Manager status:
  7486.  00h    successful
  7487.  01h    device not found, configuration error
  7488.  02h    I/O port unavailable
  7489.  04h    IRQ unavailable
  7490.  08h    DMA channel unavailable
  7491.  10h    memory range unavailable
  7492. SeeAlso: #1978
  7493.  
  7494. Format of Configuration Information Structure:
  7495. Offset    Size    Description    (Table 1980)
  7496.  00h    DWORD    bus ID
  7497.  04h    DWORD    device ID
  7498.  08h    DWORD    serial number
  7499.  0Ch    DWORD    logical ID
  7500.  10h    DWORD    flags
  7501. ---ISA bus---
  7502.  14h    BYTE    Card Select Number
  7503.  15h    BYTE    logical device number
  7504.  16h    WORD    Read Data port
  7505. ------
  7506.  18h    WORD    number of memory windows
  7507.  1Ah  9 DWORDs    physical base addresses of memory windows
  7508.  3Eh  9 DWORDs    length of memory windows
  7509.  62h  9 WORDs    memory window attributes
  7510.  74h    WORD    number of I/O ports
  7511.  76h 20 WORDs    I/O port base addresses
  7512.  B6h 20 WORDs    lengths of I/O port ranges
  7513.  F6h    WORD    number of IRQs
  7514.  F8h  7 BYTEs    IRQ registers
  7515.  FFh  7 BYTEs    IRQ attributes
  7516. 106h    WORD    number of DMA channels
  7517. 108h  7 BYTEs    DMA channels used
  7518. 10Fh  7 WORDs    DMA channel attributes
  7519. 11Dh  3 BYTEs    reserved
  7520. SeeAlso: #1978
  7521. --------W-2F1684BX0036-----------------------
  7522. INT 2F - MS Windows - VFBACKUP - GET API ENTRY POINT
  7523.     AX = 1684h
  7524.     BX = 0036h (virtual device ID for VFBACKUP device) (see #1968)
  7525.     ES:DI = 0000h:0000h
  7526. Return: ES:DI -> VxD API entry point (see #3483)
  7527.           0000h:0000h if the VxD does not support API in current mode
  7528. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7529.  
  7530. (Table 3483)
  7531. Call VFBACKUP.VXD entry point with:
  7532.     nothing -- this API is a NOP for the default Windows95 VFBACKUP
  7533. SeeAlso: #1978,#3408
  7534. --------W-2F1684BX0037-----------------------
  7535. INT 2F - MS Windows - ENABLE.VXD - GET API ENTRY POINT
  7536.     AX = 1684h
  7537.     BX = 0037h (virtual device ID for ENABLE device) (see #3508)
  7538.     ES:DI = 0000h:0000h
  7539. Return: ES:DI -> VxD API entry point (see #3483)
  7540.           0000h:0000h if the VxD does not support API in current mode
  7541. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7542.  
  7543. (Table 3508)
  7544. Call Windows95 ENABLE.VXD entry point with:
  7545.     AX = function number
  7546.         0000h get ENABLE version
  7547.         Return:    CF clear
  7548.             AX = version (AH = major, AL = minor)
  7549.         0001h
  7550.         EBX = ???
  7551.         Return: ???
  7552.         0002h get ???
  7553.         Return: CF clear
  7554.             DX:AX = ???
  7555.         0003h get ???
  7556.         Return: CF clear
  7557.             DX:AX = ???
  7558.         0004h ???
  7559.         EBX = ???
  7560.         ECX = ???
  7561.         EDX = ???
  7562.         Return: CF clear if successful
  7563.             CF set on error
  7564.         else
  7565.         Return: CF set
  7566. SeeAlso: #3483,#3484
  7567. --------W-2F1684BX0038-----------------------
  7568. INT 2F - MS Windows - VCOND - GET API ENTRY POINT
  7569.     AX = 1684h
  7570.     BX = 0038h (virtual device ID for VCOND device) (see #1968)
  7571.     ES:DI = 0000h:0000h
  7572. Return: ES:DI -> VxD API entry point (see #3484)
  7573.           0000h:0000h if the VxD does not support API in current mode
  7574. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7575.  
  7576. (Table 3484)
  7577. Call VCOND.VXD virtual-86 entry point with:
  7578.     AX = function number
  7579.         0202h
  7580.         0203h
  7581.         0204h
  7582.         0205h
  7583.         0206h
  7584.         0207h
  7585.         0208h
  7586.         0209h
  7587.         020Ah
  7588.         020Bh
  7589.         020Dh
  7590.         020Eh
  7591.         020Fh
  7592.         0210h
  7593.         0401h
  7594.         0402h
  7595.         0403h
  7596.         0404h
  7597.         0405h
  7598.         else
  7599.         NOP
  7600. SeeAlso: #3485,#3508
  7601.  
  7602. (Table 3485)
  7603. Call VCOND.VXD protected-mode entry point with:
  7604.     AX = function number
  7605.         0301h
  7606.         0302h
  7607.         0303h
  7608.         0304h
  7609.         0305h
  7610.         0306h
  7611.         0307h
  7612.         0308h
  7613.         else
  7614.         NOP
  7615. SeeAlso: #3484,#3483
  7616. --------W-2F1684BX003B-----------------------
  7617. INT 2F - MS Windows - DSVXD - GET API ENTRY POINT
  7618.     AX = 1684h
  7619.     BX = 003Bh (virtual device ID for DSVXD device) (see #1968)
  7620.     ES:DI = 0000h:0000h
  7621. Return: ES:DI -> VxD API entry point
  7622.           0000h:0000h if the VxD does not support API in current mode
  7623. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7624. --------W-2F1684BX0027-----------------------
  7625. INT 2F - MS Windows - BIOS VxD - GET API ENTRY POINT
  7626.     AX = 1684h
  7627.     BX = 003Dh (virtual device ID for BIOS device) (see #1968)
  7628.     ES:DI = 0000h:0000h
  7629. Return: ES:DI -> VxD API entry point (see #3486)
  7630.           0000h:0000h if the VxD does not support API in current mode
  7631. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7632.  
  7633. (Table 3486)
  7634. Call BIOS.VXD entry point with:
  7635.     AX = function number
  7636.         0000h get BIOS.VXD version
  7637.         Return: CF clear
  7638.             AH = major version
  7639.             AL = minor version
  7640.         0100h ???
  7641.         Return: AX = 0000h
  7642.         Note:    calls CONFIGMG services 804Eh/804Fh
  7643.         0200h ???
  7644.         Return: CF clear if successful
  7645.                 AX = ???
  7646.             CF set on error
  7647.                 AX = error code???
  7648.         Note:    invokes VxDcall 00290002h
  7649.         0300h ???
  7650.         Return: CF clear if successful
  7651.                 AX = ???
  7652.             CF set on error
  7653.                 AX = error code???
  7654.         else
  7655.         Return: CF set
  7656. SeeAlso: #3485,#3487
  7657. --------W-2F1684BX003E-----------------------
  7658. INT 2F - MS Windows - WSOCK - GET API ENTRY POINT
  7659.     AX = 1684h
  7660.     BX = 003Eh (virtual device ID for WSOCK device) (see #1968)
  7661.     ES:DI = 0000h:0000h
  7662. Return: ES:DI -> VxD API entry point
  7663.           0000h:0000h if the VxD does not support API in current mode
  7664. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7665. --------W-2F1684BX011F-----------------------
  7666. INT 2F P - MS Windows - VFLATD - GET API ENTRY POINT
  7667.     AX = 1684h
  7668.     BX = 011Fh (virtual device ID for VFLATD device) (see #1968)
  7669.     ES:DI = 0000h:0000h
  7670. Return: ES:DI -> VxD API entry point (see #3487)
  7671.           0000h:0000h if the VxD does not support API in current mode
  7672. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7673.  
  7674. (Table 3487)
  7675. Call VFLATD.VXD entry point with:
  7676.     DL = function number
  7677.         00h get VFLATD version and ???
  7678.         Return: CF clear
  7679.             EAX = version (AH = major, AL = minor)
  7680.             EBX = ???
  7681.             ECX = ???
  7682.             EDX = ??? or 00000000h
  7683.         01h ???
  7684.         AX = ???
  7685.         CX = ???
  7686.         Return: EAX = ???
  7687.             EDX = ???
  7688.         02h ???
  7689.         ???
  7690.         03h ???
  7691.         EAX = ???
  7692.         EBX = ???
  7693.         ESI = ???
  7694.         CX = ???
  7695.         DH = ???
  7696.         Return: EAX = ???
  7697.             EDX = ???
  7698.             CF clear
  7699.         04h ???
  7700.         DH = ???
  7701.         EAX = ???
  7702.         ECX = ???
  7703.         Return: CF clear
  7704.             EAX = ???
  7705.             EDX = ???
  7706.         05h ???
  7707.         ???
  7708.         Note:    locks some linear memory and calls fn 02h
  7709.         06h ???
  7710.         ???
  7711.         Return: CF clear if successful
  7712.             CF set on error
  7713.         Note:    calls fn 02h and unlocks some linear memory
  7714.         else
  7715.         Return: CF set
  7716. SeeAlso: #3486
  7717. --------W-2F1684BX0200-----------------------
  7718. INT 2F - MS Windows - VIPX - GET API ENTRY POINT
  7719.     AX = 1684h
  7720.     BX = 0200h (virtual device ID for VIPX device) (see #1968)
  7721.     ES:DI = 0000h:0000h
  7722. Return: ES:DI -> VxD API entry point
  7723.           0000h:0000h if the VxD does not support API in current mode
  7724. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7725. --------W-2F1684BX0202-----------------------
  7726. INT 2F - MS Windows - WINICE - GET API ENTRY POINT
  7727.     AX = 1684h
  7728.     BX = 0202h (virtual device ID for WINICE device) (see #1968)
  7729.     ES:DI = 0000h:0000h
  7730. Return: ES:DI -> VxD API entry point
  7731.           0000h:0000h if the VxD does not support API in current mode
  7732. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7733. --------W-2F1684BX0203-----------------------
  7734. INT 2F P - MS Windows - VCLIENT - GET API ENTRY POINT
  7735.     AX = 1684h
  7736.     BX = 0203h (virtual device ID for VCLIENT device) (see #1968)
  7737.     ES:DI = 0000h:0000h
  7738. Return: ES:DI -> VxD API entry point
  7739.           0000h:0000h if the VxD does not support API in current mode
  7740. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7741. --------W-2F1684BX0205-----------------------
  7742. INT 2F - MS Windows - BCW - GET API ENTRY POINT
  7743.     AX = 1684h
  7744.     BX = 0205h (virtual device ID for BCW device) (see #1968)
  7745.     ES:DI = 0000h:0000h
  7746. Return: ES:DI -> VxD API entry point
  7747.           0000h:0000h if the VxD does not support API in current mode
  7748. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7749. --------W-2F1684BX0207-----------------------
  7750. INT 2F R - MS Windows - DPMS VxD - GET API ENTRY POINT
  7751.     AX = 1684h
  7752.     BX = 0207h (virtual device ID for DPMS device) (see #1968)
  7753.     ES:DI = 0000h:0000h
  7754. Return: ES:DI -> VxD API entry point
  7755.           0000h:0000h if the VxD does not support API in current mode
  7756. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7757. --------W-2F1684BX0234-----------------------
  7758. INT 2F - MS Windows - VCOMMUTE - GET API ENTRY POINT
  7759.     AX = 1684h
  7760.     BX = 0234h (virtual device ID for VCOMMUTE device) (see #1968)
  7761.     ES:DI = 0000h:0000h
  7762. Return: ES:DI -> VxD API entry point
  7763.           0000h:0000h if the VxD does not support API in current mode
  7764. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7765. --------W-2F1684BX0027-----------------------
  7766. INT 2F P - MS Windows - VTDAPI - GET API ENTRY POINT
  7767.     AX = 1684h
  7768.     BX = 0442h (virtual device ID for VTDAPI device) (see #1968)
  7769.     ES:DI = 0000h:0000h
  7770. Return: ES:DI -> VxD API entry point (see #3488)
  7771.           0000h:0000h if the VxD does not support API in current mode
  7772. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7773.  
  7774. (Table 3488)
  7775. Call VTDAPI.VXD entry point with:
  7776.     EAX = function number
  7777.         0000h
  7778.         0001h
  7779.         0002h
  7780.         0003h
  7781.         0004h
  7782.         0005h
  7783.         0006h
  7784.         0007h
  7785.         0008h
  7786.         0009h
  7787.         000Ah
  7788.         000Bh
  7789.         else
  7790.         Return: nothing???
  7791. SeeAlso: #3488
  7792. --------W-2F1684BX0444-----------------------
  7793. INT 2F - MS Windows - VADMAD - GET API ENTRY POINT
  7794.     AX = 1684h
  7795.     BX = 0444h (virtual device ID for VADMAD device) (see #1968)
  7796.     ES:DI = 0000h:0000h
  7797. Return: ES:DI -> VxD API entry point (see #1981)
  7798.           0000h:0000h if the VxD does not support an API
  7799.  
  7800. (Table 1981)
  7801. Call VADMAD entry point with:
  7802.     DX = operation
  7803.         0000h set VADMAD mode
  7804.         AX = desired mode
  7805.         0001h set VADMAD channel
  7806.         AX = desired channel
  7807. Note:    after setting mode/channel, start the DMA operation with an OUT to
  7808.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  7809. SeeAlso: #0674 at INT 20"Windows"
  7810. --------W-2F1684BX0445-----------------------
  7811. INT 2F - MS Windows - VSBD - GET API ENTRY POINT
  7812.     AX = 1684h
  7813.     BX = 0445h (virtual device ID for VSBD device) (see #1968)
  7814.     ES:DI = 0000h:0000h
  7815. Return: ES:DI -> VxD API entry point
  7816.           0000h:0000h if the VxD does not support API in current mode
  7817. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7818. --------W-2F1684BX0446-----------------------
  7819. INT 2F - MS Windows - VADLIBD - GET API ENTRY POINT
  7820.     AX = 1684h
  7821.     BX = 0446h (virtual device ID for VADLIBD device) (see #1968)
  7822.     ES:DI = 0000h:0000h
  7823. Return: ES:DI -> VxD API entry point
  7824.           0000h:0000h if the VxD does not support API in current mode
  7825. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7826. --------W-2F1684BX0449-----------------------
  7827. INT 2F P - MS Windows - vjoyd - GET API ENTRY POINT
  7828.     AX = 1684h
  7829.     BX = 0449h (virtual device ID for "vjoyd" device) (see #1968)
  7830.     ES:DI = 0000h:0000h
  7831. Return: ES:DI -> VxD API entry point (see #3489)
  7832.           0000h:0000h if the VxD does not support API in current mode
  7833. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7834.  
  7835. (Table 3489)
  7836. Call VJOYD.VXD entry point with:
  7837.     AX = function number
  7838.         0000h get VJOYD version
  7839.         Return: AH = major version
  7840.             AL = minor version
  7841.         0001h ???
  7842.         DX = ???
  7843.         Return: DX:AX = ???
  7844.         0002h ???
  7845.         DX = ???
  7846.         Return: DX:AX = ???
  7847.         0003h ???
  7848.         Retrun: AX = 0001h
  7849.         0004h ???
  7850.         DX = ???
  7851.         Return: DX:AX = ???
  7852.         0005h ???
  7853.         Return: ???
  7854.         else
  7855.         Return: EAX = 00000000h
  7856. SeeAlso: #3488,#3490
  7857. --------W-2F1684BX044A-----------------------
  7858. INT 2F - MS Windows - mmdevldr - GET API ENTRY POINT
  7859.     AX = 1684h
  7860.     BX = 044Ah (virtual device ID for "mmdevldr" device) (see #1968)
  7861.     ES:DI = 0000h:0000h
  7862. Return: ES:DI -> VxD API entry point (see #3490)
  7863.           0000h:0000h if the VxD does not support API in current mode
  7864. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7865.  
  7866. (Table 3490)
  7867. Call MMDEVLDR.VXD entry point with:
  7868.     DX = function number
  7869.         0000h ???
  7870.         Return: CF clear if successful
  7871.                 AX = 0000h
  7872.             CF set on error
  7873.                 AX = error code (000Bh)
  7874.         Note:    invokes VxDCall 17000Eh ("CallAtAppyTime")
  7875.         0001h ???
  7876.         Return: CF clear if successful
  7877.                 AX = 0000h
  7878.             CF set on error
  7879.                 AX = error code (000Bh)
  7880.         Note:    invokes VxDCall 17000Eh ("CallAtAppyTime")
  7881.         0002h ???
  7882.         EDX = ???
  7883.         Return: CF clear if successful
  7884.                 AX = 0000h
  7885.                 EDX = ???
  7886.             CF set on error
  7887.                 AX = error code
  7888.         0003h ???
  7889.         Return: CF clear if successful
  7890.                 AX = 0000h
  7891.             CF set on error
  7892.                 AX = error code
  7893.         Note:    invokes VxDcall 2A0002h ("VWIN32_QueueUserApc")
  7894.         0004h set Win32 event
  7895.         Return: CF clear if successful
  7896.                 AX = 0000h
  7897.             CF set on error
  7898.                 AX = error code
  7899.         Note:    invokes VxDcall 2A000Eh ("VWIN32_SetWin32Event")
  7900.         0005h ??? (allocates some memory)
  7901.         Return: CF clear
  7902.             AX = 0000h
  7903.         0006h ??? (frees memory)
  7904.         Return: CF clear if successful
  7905.                 AX = 0000h
  7906.             CF set on error
  7907.                 AX = error code
  7908.         else
  7909.         Return: CF set
  7910.             AX = 000Bh (invalid function)
  7911. SeeAlso: #3489,#3491
  7912. --------W-2F1684BX045D-----------------------
  7913. INT 2F P - MS Windows - VflatD - GET API ENTRY POINT
  7914.     AX = 1684h
  7915.     BX = 045Dh (virtual device ID for VflatD device) (see #1968)
  7916.     ES:DI = 0000h:0000h
  7917. Return: ES:DI -> VxD API entry point
  7918.           0000h:0000h if the VxD does not support API in current mode
  7919. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7920. --------W-2F1684BX045F-----------------------
  7921. INT 2F - MS Windows - azt16 - GET API ENTRY POINT
  7922.     AX = 1684h
  7923.     BX = 045Fh (virtual device ID for "azt16" device) (see #1968)
  7924.     ES:DI = 0000h:0000h
  7925. Return: ES:DI -> VxD API entry point (see #3491)
  7926.           0000h:0000h if the VxD does not support API in current mode
  7927. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7928.  
  7929. (Table 3491)
  7930. Call azt16.VXD entry point with:
  7931.     DX = function number
  7932.         0000h get azt16 version
  7933.         Return: CF clear
  7934.             AX = version (AH=major, AL=minor)
  7935.         0001h ???
  7936.         AX = subfunction
  7937.             0000h ???
  7938.             Return:
  7939.             0001h ???
  7940.             ECX = ???
  7941.             else error
  7942.         Return: CF clear if successful
  7943.                 ???
  7944.             CF set on error
  7945.                 AX = error code
  7946.         0002h ???
  7947.         AX = ???
  7948.         BX = ???
  7949.         Return: ???
  7950.         0003h ???
  7951.         AX = ???
  7952.         BX = ???
  7953.         Return: ???
  7954.         0004h ???
  7955.         BX = ???
  7956.         CX = ???
  7957.         Return: CF clear if successful
  7958.                  AX = 0001h
  7959.             CF set on error
  7960.                  AX = 0000h
  7961.         0005h ???
  7962.         BX = ???
  7963.         CX = ???
  7964.         Return: CF clear if successful
  7965.                  AX = 0001h
  7966.             CF set on error
  7967.                  AX = 0000h
  7968.         0006h ???
  7969.         BX = ???
  7970.         ECX = ???
  7971.         Return: CF clear if succesful
  7972.                 AX = ???
  7973.             CF set on error
  7974.                 AX = FFFFh
  7975.         0100h get azt16 version
  7976.         Return: CF clear
  7977.             AX = version (AH=major, AL=minor)
  7978.         0101h
  7979.         AX = ???
  7980.         ECX = ???
  7981.         Return: CF clear if successful
  7982.                 AX = 0001h
  7983.             CF set on error
  7984.                 AX = 0000h
  7985.         0102h ???
  7986.         AX = ???
  7987.         Return: CF clear if successful
  7988.             CF set on error
  7989.                 AX = reason??? (0/1/2)
  7990.         0103h ???
  7991.         AX = ???
  7992.         Return: CF clear if successful
  7993.                 AX = 0000h
  7994.             CF set on error
  7995.                 AX = reason??? (1/3)
  7996.         0200h ???
  7997.         EDX = ???
  7998.         ???
  7999.         Return: CF clear if successful
  8000.                 DX:AX = ???
  8001.             CF set on error
  8002.                 DX:AX = 0000h:0000h
  8003.         0201h ???
  8004.         ???
  8005.         Return: CF clear
  8006.             AX= 0000h
  8007.         else
  8008.         Return: CF set
  8009. SeeAlso: #3490
  8010. --------W-2F1684BX0460-----------------------
  8011. INT 2F P - MS Windows - UNIMODEM - GET API ENTRY POINT
  8012.     AX = 1684h
  8013.     BX = 0460h (virtual device ID for UNIMODEM device) (see #1968)
  8014.     ES:DI = 0000h:0000h
  8015. Return: ES:DI -> VxD API entry point (see #3492)
  8016.           0000h:0000h if the VxD does not support API in current mode
  8017. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8018.  
  8019. (Table 3492)
  8020. Call UNIMODEM.VXD protected-mode entry point with:
  8021.     AX = function number
  8022.         0000h
  8023.         Return: AX = ???
  8024.         0001h
  8025.         Return: AX = ???
  8026.         0002h
  8027.         Return: AX = ???
  8028.         0003h
  8029.         Return: AX = ???
  8030.         0004h
  8031.         Return: AX = ???
  8032.         0005h
  8033.         Return: AX = ???
  8034.         0006h
  8035.         Return: AX = ???
  8036.         0007h
  8037.         Return: AX = ???
  8038.         else
  8039.         Return: AX = 0002h
  8040. SeeAlso: #3491,#3493
  8041. --------W-2F1684BX0480-----------------------
  8042. INT 2F - MS Windows - VNetSup - GET API ENTRY POINT
  8043.     AX = 1684h
  8044.     BX = 0480h (virtual device ID for VNetSup device) (see #1968)
  8045.     ES:DI = 0000h:0000h
  8046. Return: ES:DI -> VxD API entry point (see #3493)
  8047.           0000h:0000h if the VxD does not support API in current mode
  8048. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8049.  
  8050. (Table 3493)
  8051. Call VNetSup.VXD entry point with:
  8052.     AX = function number
  8053.         0000h
  8054.         Return: AX = ???
  8055.         0001h
  8056.         Return: AX = ???
  8057.         0002h
  8058.         Return: AX = ???
  8059.         else
  8060.         Return: CF set
  8061.             AX = 0001h
  8062. SeeAlso: #3492,#3494
  8063. --------W-2F1684BX0482-----------------------
  8064. INT 2F - MS Windows - VBrowse - GET API ENTRY POINT
  8065.     AX = 1684h
  8066.     BX = 0482h (virtual device ID for VBrowse device) (see #1968)
  8067.     ES:DI = 0000h:0000h
  8068. Return: ES:DI -> VxD API entry point
  8069.           0000h:0000h if the VxD does not support API in current mode
  8070. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8071. --------W-2F1684BX0027-----------------------
  8072. INT 2F - MS Windows - VSHARE - GET API ENTRY POINT
  8073.     AX = 1684h
  8074.     BX = 0483h (virtual device ID for VSHARE device) (see #1968)
  8075.     ES:DI = 0000h:0000h
  8076. Return: ES:DI -> VxD API entry point (see #3494)
  8077.           0000h:0000h if the VxD does not support API in current mode
  8078. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8079.  
  8080. (Table 3494)
  8081. Call Windows95 VSHARE.VXD entry point with:
  8082.     AX = function number
  8083.         0000h get VSHARE version
  8084.         Return: AH = major version
  8085.             AL = (BCD?) minor version
  8086.         else
  8087.         NOP
  8088. SeeAlso: #3493
  8089. --------W-2F1684BX0027-----------------------
  8090. INT 2F P - MS Windows - IFSMgr - GET API ENTRY POINT
  8091.     AX = 1684h
  8092.     BX = 0484h (virtual device ID for IFSMgr device) (see #1968)
  8093.     ES:DI = 0000h:0000h
  8094. Return: ES:DI -> VxD API entry point
  8095.           0000h:0000h if the VxD does not support API in current mode
  8096. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8097. --------W-2F1684BX0486-----------------------
  8098. INT 2F - MS Windows - VFAT - GET API ENTRY POINT
  8099.     AX = 1684h
  8100.     BX = 0486h (virtual device ID for VFAT device) (see #1968)
  8101.     ES:DI = 0000h:0000h
  8102. Return: ES:DI -> VxD API entry point
  8103.           0000h:0000h if the VxD does not support API in current mode
  8104. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8105. --------W-2F1684BX0487-----------------------
  8106. INT 2F - MS Windows - NWLINK - GET API ENTRY POINT
  8107.     AX = 1684h
  8108.     BX = 0487h (virtual device ID for NWLINK device) (see #1968)
  8109.     ES:DI = 0000h:0000h
  8110. Return: ES:DI -> VxD API entry point
  8111.           0000h:0000h if the VxD does not support API in current mode
  8112. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8113. --------W-2F1684BX0489-----------------------
  8114. INT 2F R - MS Windows - VIP - GET API ENTRY POINT
  8115.     AX = 1684h
  8116.     BX = 0489h (virtual device ID for VIP device) (see #1968)
  8117.     ES:DI = 0000h:0000h
  8118. Return: ES:DI -> VxD API entry point
  8119.           0000h:0000h if the VxD does not support API in current mode
  8120. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8121. --------W-2F1684BX048A-----------------------
  8122. INT 2F - MS Windows 3.11 - VXDLDR - GET API ENTRY POINT
  8123.     AX = 1684h
  8124.     BX = 048Ah (virtual device ID for VTCP device) (see #1968)
  8125.     ES:DI = 0000h:0000h
  8126. Return: ES:DI -> VxD API entry point
  8127.           0000h:0000h if the VxD does not support API in current mode
  8128. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8129. --------W-2F1684BX0027-----------------------
  8130. INT 2F - MS Windows - VCACHE - GET API ENTRY POINT
  8131.     AX = 1684h
  8132.     BX = 048Ah (virtual device ID for VCACHE device) (see #1968)
  8133.     ES:DI = 0000h:0000h
  8134. Return: ES:DI -> VxD API entry point (see #3496)
  8135.           0000h:0000h if the VxD does not support API in current mode
  8136. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8137.  
  8138. (Table 3495)
  8139. Call Windows95 VCACHE.VXD entry point with:
  8140.     Return:    CF set
  8141. SeeAlso: #3494,#3496
  8142. --------W-2F1684BX048D-----------------------
  8143. INT 2F - MS Windows - RASMAC - GET API ENTRY POINT
  8144.     AX = 1684h
  8145.     BX = 048Dh (virtual device ID for RASMAC device) (see #1968)
  8146.     ES:DI = 0000h:0000h
  8147. Return: ES:DI -> VxD API entry point
  8148.           0000h:0000h if the VxD does not support API in current mode
  8149. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8150. --------W-2F1684BX048E-----------------------
  8151. INT 2F - MS Windows - NWREDIR - GET API ENTRY POINT
  8152.     AX = 1684h
  8153.     BX = 048Eh (virtual device ID for NWREDIR device) (see #1968)
  8154.     ES:DI = 0000h:0000h
  8155. Return: ES:DI -> VxD API entry point (see #3496)
  8156.           0000h:0000h if the VxD does not support API in current mode
  8157. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8158.  
  8159. (Table 3496)
  8160. Call Windows95 NWREDIR.VXD entry point with:
  8161.     Return:    CF set
  8162.         EAX = FFFFFFFFh
  8163. SeeAlso: #3495
  8164. --------W-2F1684BX0494-----------------------
  8165. INT 2F - MS Windows - NSCL - GET API ENTRY POINT
  8166.     AX = 1684h
  8167.     BX = 0494h (virtual device ID for NSCL device) (see #1968)
  8168.     ES:DI = 0000h:0000h
  8169. Return: ES:DI -> VxD API entry point (see #3497,#3498)
  8170.           0000h:0000h if the VxD does not support API in current mode
  8171. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8172.  
  8173. (Table 3497)
  8174. Call Windows95 NSCL.VXD virtual-86 entry point with:
  8175.     AL = function number
  8176.         00h
  8177.         01h
  8178.         02h
  8179.         03h
  8180.         04h
  8181.         05h
  8182.         06h
  8183.         07h
  8184.         08h
  8185.         09h
  8186.         0Ah
  8187.         else
  8188.         Return: AX = FFFFh
  8189. SeeAlso: #3496,#3497
  8190.  
  8191. (Table 3498)
  8192. Call Windows95 NSCL.VXD protected-mode entry point with:
  8193.     AL = function number
  8194.         00h
  8195.         01h
  8196.         02h
  8197.         03h
  8198.         else
  8199.         Return: AX = FFFFh
  8200. SeeAlso: #3497
  8201. --------W-2F1684BX0499-----------------------
  8202. INT 2F - MS Windows - PPPMAC - GET API ENTRY POINT
  8203.     AX = 1684h
  8204.     BX = 0499h (virtual device ID for PPPMAC device) (see #1968)
  8205.     ES:DI = 0000h:0000h
  8206. Return: ES:DI -> VxD API entry point
  8207.           0000h:0000h if the VxD does not support API in current mode
  8208. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8209. --------W-2F1684BX049A-----------------------
  8210. INT 2F - MS Windows - VDHCP - GET API ENTRY POINT
  8211.     AX = 1684h
  8212.     BX = 049Ah (virtual device ID for VDHCP device) (see #1968)
  8213.     ES:DI = 0000h:0000h
  8214. Return: ES:DI -> VxD API entry point
  8215.           0000h:0000h if the VxD does not support API in current mode
  8216. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8217. --------W-2F1684BX049B-----------------------
  8218. INT 2F - MS Windows - VNBT - GET API ENTRY POINT
  8219.     AX = 1684h
  8220.     BX = 049Bh (virtual device ID for VNBT device) (see #1968)
  8221.     ES:DI = 0000h:0000h
  8222. Return: ES:DI -> VxD API entry point
  8223.           0000h:0000h if the VxD does not support API in current mode
  8224. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8225. --------W-2F1684BX1021-----------------------
  8226. INT 2F - MS Windows - VMB - GET API ENTRY POINT
  8227.     AX = 1684h
  8228.     BX = 1021h (virtual device ID for VMB device) (see #1968)
  8229.     ES:DI = 0000h:0000h
  8230. Return: ES:DI -> VxD API entry point
  8231.           0000h:0000h if the VxD does not support API in current mode
  8232. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8233. --------W-2F1684BX28A0-----------------------
  8234. INT 2F - MS Windows - PHARLAPX - GET API ENTRY POINT
  8235.     AX = 1684h
  8236.     BX = 28A0h (virtual device ID for PHARLAPX device) (see #1968)
  8237.     ES:DI = 0000h:0000h
  8238. Return: ES:DI -> VxD API entry point (see #1983)
  8239.           0000h:0000h if the VxD does not support an API
  8240.  
  8241. (Table 1983)
  8242. Call PHARLAPX VxD entry point with:
  8243.     AX = function
  8244.         0001h get PHARLAP.386 version
  8245.         Return: AX = version number (AH = major, AL = minor)
  8246.     ---queue functions---
  8247.         0101h allocate a new message queue
  8248.         CX = size of queue data buffer in bytes
  8249.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  8250.         0102h allocate a new key queue
  8251.         CX = size of queue data buffer in bytes
  8252.         EDX = VM handle into which keys will be pasted
  8253.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  8254.         0103h free message queue
  8255.         EDX = queue handle
  8256.         Return: AX = status (0000h,0003h,0007h) (see #1984)
  8257.         0104h free key queue
  8258.         EDX = queue handle
  8259.         Return: AX = status (0000h,0003h,0005h) (see #1984)
  8260.         0105h add message to communications queue
  8261.         EDX = queue handle
  8262.         BX = length of message data in bytes
  8263.         CX = length of message header in bytes
  8264.         ES:(E)SI -> message header
  8265.         GS:(E)DI -> message data
  8266.         Return: AX = status (0000h-0003h,0007h) (see #1984)
  8267.         0106h remove message from queue
  8268.         EDX = queue handle
  8269.         CX = length of buffer in bytes
  8270.         ES:(E)SI -> buffer for message
  8271.         Return: AX = status (0000h,0003h,0006h,0007h,0008h) (see #1984)
  8272.             CX = length of returned message (if AX=0000h or 0008h)
  8273.         0107h flush queue (remove all data)
  8274.         EDX = queue handle
  8275.         Return: AX = status (0000h,0003h) (see #1984)
  8276.         0108h add PasteKey structure(s) to key queue
  8277.         EDX = queue handle
  8278.         CX = number of PasteKey structures in buffer
  8279.         ES:(E)SI -> PasteKey array (see #1985)
  8280.         Return: AX = status (0000h-0003h) (see #1984)
  8281.         0109h register enqueueing callback function
  8282.         EDX = queue handle
  8283.         ECX = function argument
  8284.         ES:(E)SI -> callback function
  8285.         Return: AX = status (0000h,0003h,0009h) (see #1984)
  8286.         010Ah register dequeueing callback function
  8287.         EDX = queue handle
  8288.         ECX = function argument
  8289.         ES:(E)SI -> callback function
  8290.         Return: AX = status (0000h,0003h,0009h) (see #1984)
  8291.         010Bh unregister enqueueing callback function
  8292.         EDX = queue handle
  8293.         Return: AX = status (0000h,0003h,0009h) (see #1984)
  8294.         010Ch unregister dequeueing callback function
  8295.         EDX = queue handle
  8296.         Return: AX = status (0000h,0003h,0009h) (see #1984)
  8297.         010Dh get message queue status
  8298.         EDX = queue handle
  8299.         Return: AX = status (0000h,0003h) (see #1984)
  8300.             CX = number of pending messages
  8301.         010Eh peek at message in queue
  8302.         EDX = queue handle
  8303.         BX = number of message in queue (0000h = first)
  8304.         CX = size of buffer in bytes
  8305.         ES:(E)SI -> buffer for message
  8306.         Return: AX = status (0000h,0003h,0006h,0008h) (see #1984)
  8307.             CX = length of returned message (if AX=0000h or 0008h)
  8308.         010Fh peek at last message in queue
  8309.         EDX = queue handle
  8310.         CX = size of buffer in bytes
  8311.         ES:(E)SI -> buffer for message
  8312.         Return: AX = status (0000h,0003h,0006h,0008h) (see #1984)
  8313.             CX = length of returned message (if AX=0000h or 0008h)
  8314.         0110h replace last message in queue
  8315.         EDX = queue handle
  8316.         CX = length of message header in bytes
  8317.         BX = length of message data in bytes
  8318.         ES:(E)SI -> message header
  8319.         GS:(E)DI -> message data
  8320.         Return: AX = status (0000h,0002h,0003h) (see #1984)
  8321.         0111h set permitted message count for queue
  8322.         EDX = queue handle
  8323.         CX = maximum number of messages to enqueue (FFFFh = unlimited)
  8324.         Return: AX = status (0000h,0003h) (see #1984)
  8325.     ---generalized VxD services---
  8326.         0202h call VxD function
  8327.         ES:(E)BX -> in/out register-set buffer
  8328.         Return: buffer updated
  8329.         0203h map flat
  8330.         ???
  8331.     --system register functions---
  8332.         0301h read system registers into buffer
  8333.         ES:(E)SI -> 512-byte buffer
  8334.         Return: AX = 0000h
  8335.             buffer filled (mostly zeros)
  8336.         0302h copy linear memory into buffer
  8337.         EDX = linear address
  8338.         CX = number of bytes to copy
  8339.         ES:(E)SI -> buffer
  8340.         Return: AX = 0000h
  8341.         0303h copy data into linear memory
  8342.         EDX = linear address
  8343.         CX = number of bytes to copy
  8344.         ES:(E)SI -> buffer
  8345.         Return: AX = 0000h
  8346.         0304h freeze VM
  8347.         ???
  8348.         0305h unfreeze VM
  8349.         ???
  8350.     ---name registration functions---
  8351.         0401h register name
  8352.         EDX = magic number to associate with name
  8353.         ES:(E)SI -> name to register
  8354.         Return: AX = status (0000h,0009h) (see #1984)
  8355.         0402h unregister name
  8356.         ES:(E)SI -> name to be unregistered
  8357.         Return: AX = status (0000h,0009h) (see #1984)
  8358.         0403h look up name
  8359.         ES:(E)SI -> name to look up
  8360.         Return: DX:AX = magic number or 0000h:0000h if not registered
  8361.         0404h get name list handle
  8362.         Return: DX:AX = name list handle
  8363.                 0000h:0000h if not initialized
  8364.     ---special DOS server routines (undocumented)---
  8365.         0501h register
  8366.         0502h unregister
  8367.         0503h validate VM
  8368.         0504h get INT9 count
  8369.         0505h get screen line
  8370.         0506h get shift status
  8371.         0507h get server PB pointer
  8372.         0508h initialize DOS shell
  8373.         0509h get last VM handle
  8374.  
  8375. (Table 1984)
  8376. Values for PHARLAPX function status:
  8377.  00h    successful
  8378.  01h    data is too large to fit in queue
  8379.  02h    queue is full
  8380.  03h    invalid queue handle
  8381.  04h    invalid VM handle for queue
  8382.  05h    error starting a paste operation
  8383.  06h    queue is empty
  8384.  07h    a VM is blocked waiting on the queue
  8385.  08h    message was too long (truncated)
  8386.  09h    unable to register or unregister specified callback
  8387. SeeAlso: #1983
  8388.  
  8389. Format of PHARLAPX PasteKey structure:
  8390. Offset    Size    Description    (Table 1985)
  8391.  00h    BYTE    ASCII code
  8392.  01h    BYTE    scan code (see #0005)
  8393.  02h    WORD    shift states
  8394. SeeAlso: #1983
  8395.  
  8396. Format of PHARLAPX VxD-call register structure:
  8397. Offset    Size    Description    (Table 1986)
  8398.  00h    DWORD    call number
  8399.  04h    WORD    input register map (see #1987)
  8400.  06h    WORD    output register map (see #1987)
  8401.  08h  7 DWORDs    values for EAX, EBX, ECX, EDX, EBP, ESI, EDI on call
  8402.  24h  4    WORDs    values for DS, ES, FG, GS on call
  8403.  2Ch    DWORD    EFLAGS on call
  8404.  30h  7 DWORDs    returned values of EAX, EBX, ECX, EDX, EBP, ESI, EDI
  8405.  4Ch  4 WORDs    returned values of DS, ES, FS, GS
  8406.  54h    DWORD    returned EFLAGS
  8407. SeeAlso: #1983
  8408.  
  8409. Bitfields for PHARLAPX VxD-call register map:
  8410. Bit(s)    Description    (Table 1987)
  8411.  0    value in EAX field is valid
  8412.  1    value in EBX field is valid
  8413.  2    value in ECX field is valid
  8414.  3    value in EDX field is valid
  8415.  4    value in EBP field is valid
  8416.  5    value in ESI field is valid
  8417.  6    value in EDI field is valid
  8418.  7    value in DS field is valid
  8419.  8    value in ES field is valid
  8420.  9    value in FS field is valid
  8421.  10    value in GS field is valid
  8422.  11    value in EFLAGS field is valid
  8423. SeeAlso: #1986
  8424. --------W-2F1684BX28A1-----------------------
  8425. INT 2F - MS Windows - PharLap VxD - GET API ENTRY POINT
  8426.     AX = 1684h
  8427.     BX = 28A1h (virtual device ID for PharLap device) (see #1968)
  8428.     ES:DI = 0000h:0000h
  8429. Return: ES:DI -> VxD API entry point
  8430.           0000h:0000h if the VxD does not support API in current mode
  8431. SeeAlso: AX=1684h"DEVICE API",AX=1684h/BX=28A0h,INT 20"Windows"
  8432. --------W-2F1684BX2925-----------------------
  8433. INT 2F - MS Windows - EDOS - GET API ENTRY POINT
  8434.     AX = 1684h
  8435.     BX = 2925h (virtual device ID for EDOS device) (see #1968)
  8436.     ES:DI = 0000h:0000h
  8437. Return: ES:DI -> VxD API entry point (see #1988)
  8438.           0000h:0000h if the VxD does not support an API
  8439.  
  8440. (Table 1988)
  8441. Call EDOS entry point with:
  8442.     AX = 0000h get EDOS version number
  8443.         Return: AH = major version
  8444.             AL = minor version
  8445.     AX = 0001h display message
  8446.         CX = 0
  8447.         DX:BX -> ASCIZ Message
  8448.     AX = 0002h get EDOS error coded
  8449.         Return: EAX = time in milliseconds that Windows has been running
  8450.     AX = 0003h execute windows program
  8451.         Return: EAX = cumulative amount of time the virtual machine has
  8452.             been active, in milliseconds
  8453.     AX = 0008h get/set priority
  8454.         BX = 0000h??? foreground
  8455.          0001h background
  8456.         DI = 0000h get
  8457.          0001h set
  8458.         DX = priority setting
  8459.         Return: CX = foreground priority
  8460.             DX = background priority
  8461.             BX:AX = flags
  8462.             00000001h exclusive ON
  8463.             00000010h background ON
  8464.             SI = CPU percentage
  8465. --------W-2F1684BX292D-----------------------
  8466. INT 2F - MS Windows - VSBPD - GET API ENTRY POINT
  8467.     AX = 1684h
  8468.     BX = 292Dh (virtual device ID for VSBPD device) (see #1968)
  8469.     ES:DI = 0000h:0000h
  8470. Return: ES:DI -> VxD API entry point
  8471.           0000h:0000h if the VxD does not support API in current mode
  8472. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8473. --------W-2F1684BX295A-----------------------
  8474. INT 2F - MS Windows - GRVSULTR - GET API ENTRY POINT
  8475.     AX = 1684h
  8476.     BX = 295Ah (virtual device ID for GRVSULTR device) (see #1968)
  8477.     ES:DI = 0000h:0000h
  8478. Return: ES:DI -> VxD API entry point
  8479.           0000h:0000h if the VxD does not support API in current mode
  8480. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8481. --------x-2F1684BX304C-----------------------
  8482. INT 2F - Intel Plug-and-Play - CONFIGURATION ACCESS - GET ENTRY POINT
  8483.     AX = 1684h
  8484.     BX = 304Ch (ID for Configuration Access) (see #1968)
  8485.     ES:DI = 0000h:0000h
  8486. Return: ES:DI -> API entry point (see #1989)
  8487.           0000h:0000h if Configuration Access not loaded
  8488. Note:    this API is often provided by a DOS device driver, in which case it
  8489.       is available whether or not MSWindows is running
  8490. Index:    installation check;Plug-and-Play Configuration Access
  8491. SeeAlso: AX=1684h/BX=0034h
  8492.  
  8493. (Table 1989)
  8494. Call Plug-and-Play Configuration Access entry point with:
  8495.     AX = function
  8496.         0000h "CA_GetVersion"
  8497.         Return: AX = BCD version (AH = major, AL = minor)
  8498.         0001h "CA_PCI_Read_Config_Byte" (see also INT 1A/AX=B108h)
  8499.     !!!
  8500.         0002h "CA_PCI_Read_Config_Word" (see also INT 1A/AX=B109h)
  8501.         0003h "CA_PCI_Read_Config_DWord" (see also INT 1A/AX=B10Ah)
  8502.         0004h "CA_PCI_Write_Config_Byte" (see also INT 1A/AX=B10Bh)
  8503.         0005h "CA_PCI_Write_Config_Word" (see also INT 1A/AX=B10Ch)
  8504.         0006h "CA_PCI_Write_Config_DWord" (see also INT 1A/AX=B10Dh)
  8505.         0007h "CA_PCI_Generate_Special_Cycle" (see also INT 1A/AX=B106h)
  8506.         0008h "CA_PCI_Get_Routing_Options" (see also INT 1A/AX=B10Eh)
  8507.         0009h invalid function
  8508.         000Ah invalid function
  8509.         000Bh "CA_PnPISA_Get_Info"
  8510.         000Ch "CA_PnPISA_Read_Config_Byte"
  8511.         000Dh "CA_PnPISA_Write_Config_Byte"
  8512.         000Eh "CA_PnPISA_Get_Resource_Data"
  8513.         000Fh invalid function
  8514.         0010h "CA_EISA_Get_Board_ID"
  8515.         0011h "CA_EISA_Get_Slot_Config"
  8516.         0012h "CA_EISA_Get_SlotFunc_Config"
  8517.         0013h "CA_EISA_Clear_NVRAM_Config"
  8518.         0014h "CA_EISA_Write_Config"
  8519.         0015h invalid function
  8520.         0016h "CA_ESCD_Get_Info"
  8521.         0017h "CA_ESCD_Read_Config"
  8522.         0018h "CA_ESCD_Write_Config"
  8523.         0019h invalid function
  8524.         001Ah "CA_Acfg_PCI_Manage_IRQs"
  8525.         DL = IRQ???
  8526.         ES:DI -> ???
  8527.         Return: AX = status
  8528.         001Bh "CA_Acfg_PCI_Get_Routing_Options"
  8529.         ES:DI -> IRQ routing table header
  8530.               (see #0666 at INT 1A/AX=B406h)
  8531.         Return: AX = status
  8532.         001Ch-001Fh invalid functions
  8533.         0020h "CA_PnPB_Get_Num_Sys_Dev_Nodes"
  8534.         0021h "CA_PnPB_Get_Sys_Dev_Node"
  8535.         0022h "CA_PnPB_Set_Sys_Dev_Node"
  8536.         0023h "CA_PnPB_Get_Stat_Res_Info"
  8537.         0024h "CA_PnPB_Set_Stat_Res_Info"
  8538. Return: AX = FFFFh if unsupported function
  8539. SeeAlso: #3501
  8540. --------W-2F1684BX3099-----------------------
  8541. INT 2F - MS Windows - VVidramD - GET API ENTRY POINT
  8542.     AX = 1684h
  8543.     BX = 3099h (virtual device ID for VVidramD device) (see #1968)
  8544.     ES:DI = 0000h:0000h
  8545. Return: ES:DI -> VxD API entry point (see #3501)
  8546.           0000h:0000h if the VxD does not support API in current mode
  8547. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8548.  
  8549. (Table 3501)
  8550. Call VVidramD (VIDRAM.VXD) virtual-86 entry point with:
  8551.     AX = function number
  8552.         0000h map page???
  8553.         BX = page number???
  8554.         Return: CF clear if successful
  8555.             CF set on error
  8556.         0001h ???
  8557.         Return: CF clear if successful
  8558.             CF set on error
  8559.         else
  8560.         Return: CF set
  8561. SeeAlso: #1989,#3499
  8562. --------W-2F1684BX30F6-----------------------
  8563. INT 2F P - MS Windows - WSVV - GET API ENTRY POINT
  8564.     AX = 1684h
  8565.     BX = 30F6h (virtual device ID for WSVV device) (see #1968)
  8566.     ES:DI = 0000h:0000h
  8567. Return: ES:DI -> VxD API entry point
  8568.           0000h:0000h if the VxD does not support API in current mode
  8569. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8570.  
  8571. (Table 3499)
  8572. Call WSVV.VXD protected-mode entry point with:
  8573.     AX = function number
  8574.         ????
  8575.     Return: ???
  8576. SeeAlso: #3501,#1990
  8577. --------W-2F1684BX310E-----------------------
  8578. INT 2F - MS Windows - WPS - GET API ENTRY POINT
  8579.     AX = 1684h
  8580.     BX = 310Eh (virtual device ID for WPS device) (see #1968)
  8581.     ES:DI = 0000h:0000h
  8582. Return: ES:DI -> VxD API entry point (see #1990)
  8583.           0000h:0000h if the VxD does not support an API
  8584. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8585.  
  8586. (Table 1990)
  8587. Call WPS protected-mode entry point with:
  8588.     DX = function
  8589.         0000h get WPS.386 version
  8590.         Return: CF clear
  8591.             AX = version (AH = major, AL = minor)
  8592.         0001h get number of installed VxDs
  8593.         Return: CF clear
  8594.             AX = number of installed VxDs
  8595.         0002h get VxD characteristics
  8596.         AX = number of VxD
  8597.         ES:BX -> buffer for VxD characteristics structure (see #1991)
  8598.         Return: CF clear
  8599.             ES:BX buffer filled
  8600. SeeAlso: #3499,#1992
  8601.  
  8602. Format of WPS.386 VxD characteristics structure:
  8603. Offset    Size    Description    (Table 1991)
  8604.  00h    WORD    VxD ID number
  8605.  02h    BYTE    VxD minor version
  8606.  03h    BYTE    VxD major version
  8607.  04h    BYTE    DDK minor version
  8608.  05h    BYTE    DDK major version
  8609.  06h    WORD    flags
  8610.         bit 0: V86 API supported
  8611.         bit 1: PM API supported
  8612.         bit 2: services supported
  8613.  08h    DWORD    start order
  8614.  0Ch  9 BYTEs    ASCIZ VxD name
  8615. SeeAlso: #1990
  8616. --------W-2F1684BX31CF-----------------------
  8617. INT 2F - MS Windows - STAT.386 - GET API ENTRY POINT
  8618.     AX = 1684h
  8619.     BX = 31CFh (virtual device ID for STAT.386) (see #1968)
  8620.     ES:DI = 0000h:0000h
  8621. Return: ES:DI -> VxD API entry point (see #1992)
  8622.           0000h:0000h if the VxD does not support an API
  8623. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8624.  
  8625. (Table 1992)
  8626. Call STAT.386 entry point with:
  8627.     AX = function
  8628.         0000h get version
  8629.         Return: AX = STAT.386 version (AH = major, AL = minor)
  8630.         0001h execute RDMSR/WRMSR/RDTSC
  8631.         BH = 00h
  8632.         BL = second opcode byte (30h=WRMSR,31h=RDTSC,32h=RDMSR)
  8633.         EDX:EDI = value to be written (for BL=30h)
  8634.         ECX = MSR number for RDMSR/WRMSR
  8635.         Return: EDX:EAX = value read (RDTSR/RDMSR only)
  8636. SeeAlso: #1990,#3502
  8637. --------W-2F1684BX34DC-----------------------
  8638. INT 2F - QEMM v8.01 - MAGNARAM VxD - GET API ENTRY POINT
  8639.     AX = 1684h
  8640.     BX = 34DCh (virtual device ID for MAGNARAM) (see #1968)
  8641.     ES:DI = 0000h:0000h
  8642. Return: ES:DI -> VxD API entry point (see #3502)
  8643.           0000h:0000h if the VxD does not support an API
  8644. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8645.  
  8646. (Table 3502)
  8647. Call MAGNARAM MAGNA95.VXD protected-mode entry point with:
  8648.     AX = function number
  8649.         0000h get version and ???
  8650.         Return: AX = version (AH = major, AL = minor)
  8651.             CX = ???
  8652.                 bit 0: ???
  8653.                 bit 1: ???
  8654.         0001h get ???
  8655.         Return: CF clear
  8656.             DX:AX = ??? SHL 2
  8657.         0002h
  8658.         Return: CF clear if successful
  8659.                 AX = ???
  8660.                 DX = ???
  8661.             CF set on error
  8662.         0003h get ???
  8663.         Return: CF clear
  8664.             DX:AX = ??? SHL 2
  8665.         0004h ???
  8666.         Return: CF clear
  8667.             DX:AX = ???
  8668.         0005h ???
  8669.         Return: CF clear
  8670.             DX:AX = ???
  8671.         0006h ???
  8672.         Return: CF clear
  8673.             DX:AX = ???
  8674.         0007h ???
  8675.         Return: CF clear
  8676.             DX:AX = ???
  8677.         0008h ???
  8678.         Return: CF clear
  8679.             DX:AX = ???
  8680.         0009h ???
  8681.         Return: CF clear
  8682.             DX:AX = ???
  8683.         000Ah ???
  8684.         Return: CF clear
  8685.             DX:AX = ???
  8686.         000Bh get ???
  8687.         Return: CF clear
  8688.             DX:AX = ??? SHL 2
  8689.         000Ch get ???
  8690.         Return: CF clear
  8691.             DX:AX = ??? SHL 2
  8692.         000Dh get ???
  8693.         Return: CF clear
  8694.             DX:AX = ??? SHL 2
  8695.         000Eh get ???
  8696.         Return: CF clear
  8697.             AX = ???
  8698.             DX = ???
  8699.         000Fh get ???
  8700.         Return: CF clear
  8701.             DX:AX = ???
  8702.         0010h get ???
  8703.         Return: CF clear
  8704.             DX:AX = ???
  8705.         0011h get ???
  8706.         Return: CF clear
  8707.             DX:AX = ???
  8708.         0012h get ???
  8709.         Return: CF clear
  8710.             DX:AX = ???
  8711.         0013h get ???
  8712.         Return: CF clear
  8713.             DX:AX = ???
  8714.         0014h get ???
  8715.         Return: CF clear
  8716.             DX:AX = ???
  8717.         0015h get ???
  8718.         Return: CF clear
  8719.             DX:AX = ???
  8720.         else
  8721.         Return: CF set
  8722. SeeAlso: #1992,#1993
  8723. --------W-2F1684BX357E-----------------------
  8724. INT 2F - MS Windows - DSOUND - GET API ENTRY POINT
  8725.     AX = 1684h
  8726.     BX = 357Eh (virtual device ID for DSOUND device) (see #1968)
  8727.     ES:DI = 0000h:0000h
  8728. Return: ES:DI -> VxD API entry point
  8729.           0000h:0000h if the VxD does not support API in current mode
  8730. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8731. ----------2F1684BX377B-----------------------
  8732. INT 2F - MS Windows - MX1501HAD - GET API ENTRY POINT
  8733.     AX = 1684h
  8734.     BX = 377Bh (virtual device ID for MX1501HAD device)
  8735.     ES:DI = 0000h:0000h
  8736. Return: ES:DI -> VxD API entry point (see #1993)
  8737.           0000h:0000h if the VxD does not support an API
  8738. Note:    The drivers VCMD95C.VXD and VCMD.386 are part of the driver disks
  8739.       provided with the chip-card-reader/keyboard combination MX 1501 HAD,
  8740.       produced by Cherry
  8741. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8742.  
  8743. (Table 1993)
  8744. Call CHERRY VCMD95C.VXD entry point with:
  8745.     AX = function
  8746.         0001h get version
  8747.         Return: AX = version number (0100h) (AH = major, AL = minor)
  8748.         0002h hook INT 09 (and 8???)
  8749.         0003h unhook INT 09 (and 8???)
  8750.         0004h get number of bytes in FIFO
  8751.         Return: AX = bytes in FIFO
  8752.         0005h get next FIFO-data
  8753.         Return: AX = data
  8754.             BL = port number
  8755.             BH = direction (1=in, 0=out)
  8756.             DX:CX = timestamp
  8757.         0006h clear FIFO
  8758.         0007h output byte
  8759.         DX = port number
  8760.         BL = keyboard command
  8761.         Return: data in FIFO (see #1995)
  8762.                (value, port, in/out, timestamp)
  8763.         0008h input byte
  8764.         DX = port number
  8765.         Return: data in FIFO (see #1995)
  8766.             (value, port, in/out, timestamp)
  8767.         0009h input byte immediately
  8768.         DX = port number
  8769.         Return: AX = data
  8770.         000Ah read next FIFO data (nondestructive)
  8771.         Return: AX = data
  8772.             BL = port number
  8773.             BH = direction (1=in, 0=out)
  8774.             DX:CX = timestamp
  8775.         000Bh get timestamp
  8776.         Return: DX:CX = timestamp (in ms)
  8777.         000Ch enable IRQ 1
  8778.         000Dh disable IRQ 1
  8779.         000Eh enable data retrieval
  8780.         Note:    Sets a flag in the internal mode-byte which
  8781.               tells the driver to recognize the data
  8782.         000Fh disable data retrieval
  8783.         Note:    resets a flag in the internal mode-byte
  8784.         0010h get retrieval mode
  8785.         Return: AX = current retrieval mode
  8786.         0011h set retrieval mode
  8787.         BX = new retrieval mode (see #1994)
  8788.         Return: AX = old retrieval mode
  8789.         0012h get command value
  8790.         Return: AX = command value
  8791.         0013h set command value
  8792.         BX = command value
  8793. SeeAlso: #1992,#3500
  8794.  
  8795. Bitfields for retrieval mode:
  8796. Bit(s)    Description    (Table 1994)
  8797.  0    enable data retrieval
  8798.  1    0 = interrupt-driven
  8799.     1 = polling mode
  8800.  2    0 = read port 60h everytime
  8801.     1 = read port 60h only when OBF of port 64h is set
  8802.  3    0 = don't call old INT 9
  8803.     1 = call INT 9 before our INT-handler
  8804.  4-7    reserved
  8805. SeeAlso: #1993,#1995
  8806.  
  8807. Structure of FIFO entry (1024 entries in FIFO):
  8808. Offset    Size    Description    (Table 1995)
  8809.  00h    BYTE    data byte
  8810.  01h    BYTE    I/O port
  8811.  02h    BYTE    direction (1=in, 0=out)
  8812.  03h    BYTE    reserved
  8813.  04h    DWORD    timestamp
  8814. SeeAlso: #1993,#1994
  8815. --------W-2F1684BX38DA-----------------------
  8816. INT 2F - MS Windows - VIWD - GET API ENTRY POINT
  8817.     AX = 1684h
  8818.     BX = 38DAh (virtual device ID for VIWD device) (see #1968)
  8819.     ES:DI = 0000h:0000h
  8820. Return: ES:DI -> VxD API entry point (see #3500)
  8821.           0000h:0000h if the VxD does not support API in current mode
  8822. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8823.  
  8824. (Table 3500)
  8825. Call VIWD.VXD entry point with:
  8826.     DX = function number
  8827.         0000h ???
  8828.         Return: CF clear
  8829.             AX = ???
  8830.         0004h ???
  8831.         Return: CF clear
  8832.             DX = 0000h
  8833.         0006h
  8834.         Return: CF clear
  8835.         000Ah
  8836.         AX = ???
  8837.         Return: CF clear if successful
  8838.             CF set on error
  8839.         000Ch
  8840.         000Dh
  8841.         000Eh
  8842.         Return: CF clear
  8843.         000Fh
  8844.         Return: CF clear
  8845.         0010h
  8846.         0011h
  8847.         0015h
  8848.         Return: CF clear if successful
  8849.                 AX = ???
  8850.             CF set on error
  8851.                 AX = ???
  8852.             DX = 0000h
  8853.         0016h
  8854.         0017h
  8855.         Return: CF clear if successful
  8856.                 AX = ???
  8857.             CF set on error
  8858.                 AX = ???
  8859.             DX = 0000h
  8860.         0018h ???
  8861.         CX = ???
  8862.         Return: CF clear if successful
  8863.                 AX = 0000h
  8864.             CF set on error
  8865.         else
  8866.         Return: CF set
  8867. SeeAlso: #1993,#1996
  8868. --------W-2F1684BX4321-----------------------
  8869. INT 2F - MS Windows - POSTMSG - GET API ENTRY POINT
  8870.     AX = 1684h
  8871.     BX = 4321h (virtual device ID for POSTMSG device) (see #1968)
  8872.     ES:DI = 0000h:0000h
  8873. Return: ES:DI -> VxD API entry point (see #1996,#1998)
  8874.           0000h:0000h if the VxD does not support an API
  8875.  
  8876. (Table 1996)
  8877. Call POSTMSG protected-mode entry point with:
  8878.     AX = window handle
  8879.     CX:BX -> callback procedure (see #1997)
  8880. Return: nothing
  8881. Note:    this call registers a WinApp with the VxD; the callback must be in a
  8882.       fixed, non-discardable code segment
  8883. SeeAlso: #1998,#1982
  8884.  
  8885. (Table 1997)
  8886. Values POSTMSG callback routine is called with:
  8887.     STACK:    DWORD    "lParam" parameter from DOSApp
  8888.         WORD    "wParam" parameter from DOSApp
  8889.         WORD    Windows message number (WM_USER + 100h)
  8890.         WORD    registered HWND
  8891.  
  8892. (Table 1998)
  8893. Call POSTMSG V86-mode entry point with:
  8894.     BX = wParam value to pass to protected-mode callback
  8895.     DX:AX = lParam value to pass to protected-mode callback
  8896. Return: CF clear if successful
  8897.     CF set on error (no WinApp registered)
  8898. SeeAlso: #1996
  8899. --------W-2F1684BX7FE0-----------------------
  8900. INT 2F - MS Windows - VSWITCHD - GET API ENTRY POINT
  8901.     AX = 1684h
  8902.     BX = 7FE0h (virtual device ID for VSWITCHD device) (see #1968)
  8903.     ES:DI = 0000h:0000h
  8904. Return: ES:DI -> VxD API entry point (see #1982)
  8905.           0000h:0000h if the VxD does not support an API
  8906.  
  8907. (Table 1982)
  8908. Call VSWITCHD entry point with:
  8909.     AX = function
  8910.         0000h toggle windowed mode (simulate Alt-Enter keypress)
  8911.         Return: nothing
  8912.         0001h get windowed mode
  8913.         Return: CF clear if VM is windowed
  8914.             CF set if VM is full-screen
  8915. SeeAlso: #1996,#1999
  8916. --------W-2F1684BX8888-----------------------
  8917. INT 2F - MS Windows - VbillD - GET API ENTRY POINT
  8918.     AX = 1684h
  8919.     BX = 8888h (virtual device ID for VbillD device) (see #1968)
  8920.     ES:DI = 0000h:0000h
  8921. Return: ES:DI -> VxD API entry point (see #1999)
  8922.           0000h:0000h if the VxD does not support an API
  8923.  
  8924. (Table 1999)
  8925. Call VbillD entry point with:
  8926.     AX = function
  8927.         0001h set reverse video
  8928.         0002h set normal video
  8929. Return: ???
  8930. SeeAlso: #1982
  8931. --------W-2F1685-----------------------------
  8932. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  8933.     AX = 1685h
  8934.     BX = VM ID of virtual machine to switch to
  8935.     CX = flags (see #2000)
  8936.     DX:SI = priority boost (refer to VMM.INC)
  8937.     ES:DI -> FAR procedure to callback
  8938. Return: CF set on error
  8939.         AX = error code
  8940.         01h invalid VM ID
  8941.         02h invalid priority boost
  8942.         03h invalid flags
  8943.     CF clear if successful
  8944.         event will be or has been called
  8945. Notes:    some DOS devices, such as networks, need to call functions in a
  8946.       specific VM. This call forces the appropriate VM to be installed.
  8947.     the callback procedure must preserve all registers and return with IRET
  8948. SeeAlso: AX=1683h,INT 15/AX=1117h,AX=DB06h"WINGO"
  8949.  
  8950. Bitfields for VM switching flags:
  8951. Bit(s)    Description    (Table 2000)
  8952.  0    wait until interrupts enabled
  8953.  1    wait until critical section unowned
  8954.  2-15    reserved (zero)
  8955. --------E-2F1686-----------------------------
  8956. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  8957.     AX = 1686h
  8958. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  8959.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  8960. SeeAlso: AX=1687h
  8961. --------E-2F1687-----------------------------
  8962. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  8963.     AX = 1687h
  8964. Return: AX = 0000h if installed
  8965.         BX = flags
  8966.         bit 0: 32-bit programs supported
  8967.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  8968.         DH = DPMI major version
  8969.         DL = two-digit DPMI minor version (binary)
  8970.         SI = number of paragraphs of DOS extender private data
  8971.         ES:DI -> DPMI mode-switch entry point (see #2001)
  8972.     AX nonzero if not installed
  8973. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  8974. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT D4/AH=10h
  8975.  
  8976. (Table 2001)
  8977. Call DPMI mode switch entry point with:
  8978.     AX = flags
  8979.         bit 0: set if 32-bit program
  8980.     ES = real mode segment of buffer for DPMI private data (ignored if
  8981.         SI was zero)
  8982. Return: CF set on error
  8983.         program still in real mode
  8984.         AX = error code (DPMI 1.0+)
  8985.            8011h unable to allocate all necessary descriptors
  8986.            8021h 32-bit program specified, but 16-bit DPMI host
  8987.     CF clear if successful
  8988.         CS = 16-bit selector corresponding to real-mode CS
  8989.         SS = selector corresponding to real-mode SS (64K limit)
  8990.         DS = selector corresponding to real-mode DS (64K limit)
  8991.         ES = selector to program's PSP (100h byte limit)
  8992.         FS = GS = 0
  8993.         high word of ESP = 0 if 32-bit program
  8994.         program now in protected mode
  8995. Note:    this entry point is only called for the initial switch to protected
  8996.       mode
  8997. --------W-2F1688BX0BAD-----------------------
  8998. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET ALIAS SELECTOR TO LDT
  8999.     AX = 1688h
  9000.     BX = 0BADh
  9001. Return: AX = 0000h if supported
  9002.         BX = alias selector for LDT
  9003. Note:    use the LSL instruction or GetSelectorLimit() to find LDT size
  9004.     this call should be considered obsolete for Windows 3.1+, as the
  9005.       alias selector can be retrieved via the API entry point for
  9006.       "MS-DOS" retrieved from INT 2F/AX=168Ah (see #2003)
  9007. --------W-2F1689-----------------------------
  9008. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  9009.     AX = 1689h
  9010.     ???
  9011. Return: ???
  9012. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  9013. --------E-2F168A-----------------------------
  9014. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  9015.     AX = 168Ah
  9016.     DS:(E)SI = selector:offset of ASCIZ vendor name (see #2002)
  9017. Return: AL = status
  9018.         00h successful
  9019.            ES:(E)DI -> extended API entry point
  9020.         8Ah unsuccessful
  9021. Notes:    the vendor name is used to determine which entry point to return; it is
  9022.       case-sensitive
  9023.     available in protected mode only
  9024.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  9025.     this call is present but not documented for DPMI 0.9
  9026.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  9027.       other than the MS-DOS one gracefully, producing an unhandled
  9028.       exception report; this has been fixed in the Borland Pascal 7 version
  9029. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  9030.  
  9031. (Table 2002)
  9032. Values for DPMI vendor-specific API names:
  9033.  "MS-DOS"    MS Windows and 386MAX v6.00+ (see #2003)
  9034.  "386MAX"    386MAX v6.00+
  9035.  "HELIX_DPMI"    Helix Netroom's DPMI server
  9036.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286 (see #2004)
  9037.  "RATIONAL DOS/4G"  DOS/4G, DOS/4GW
  9038.  
  9039. (Table 2003)
  9040. Call Windows-support ("MS-DOS") entry point with:
  9041.     AX = 0100h get LDT alias selector
  9042. Return: CF clear if successful
  9043.         AX = alias selector
  9044.     CF set on error
  9045.  
  9046. (Table 2004)
  9047. Call Phar Lap RUN286 entry point with:
  9048.     AX = 0000h (function "load MSW")
  9049.     BX = new value for MSW register (low word of CR0)
  9050. Return: ???
  9051. --------W-2F168B-----------------------------
  9052. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  9053.     AX = 168Bh
  9054.     BX = virtual machine ID (see AX=1683h), 0000h for current DOS box
  9055. Return: AL = 00h if focus set to specified VM
  9056. Notes:    documented on the Microsoft Developer's Network CD-ROM
  9057.     if the VM is a windowed DOS box, it will be set to full screen
  9058. SeeAlso: AX=1683h
  9059. --------W-2F168C-----------------------------
  9060. INT 2F - MS Windows 3.1 - RESTART COMMAND
  9061.     AX = 168Ch
  9062.     ???
  9063. Return: ???
  9064. Note:    WIN.COM executes specified application
  9065. --------W-2F168EDX0000-----------------------
  9066. INT 2F - Windows95 - TITLE - SET APPLICATION TITLE
  9067.     AX = 168Eh
  9068.     DX = 0000h
  9069.     ES:DI -> ASCIZ application title (max 79 chars+NUL)
  9070. Return: AX = status
  9071.         0000h failed
  9072.         0001h successful
  9073. Note:    if ES:DI is 0000h:0000h or points at an empty string, the current
  9074.       title is removed
  9075. BUG:    this function can return a successful status even though the title was
  9076.       not changed; reportedly, waiting for two clock ticks after program
  9077.       startup solves this problem
  9078. SeeAlso: AX=168Eh/DX=0001h,AX=168Eh/DX=0002h
  9079. --------W-2F168EDX0001-----------------------
  9080. INT 2F - Windows95 - TITLE - SET VIRTUAL MACHINE TITLE
  9081.     AX = 168Eh
  9082.     DX = 0001h
  9083.     ES:DI -> ASCIZ virtual machine title (max 29 chars+NUL)
  9084. Return: AX = status
  9085.         0000h failed
  9086.         0001h successful
  9087. Notes:    if ES:DI is 0000h:0000h or points at an empty string, the current
  9088.       title is removed
  9089.     the VM title should only be changed on explicit instruction from the
  9090.       user
  9091. BUG:    this function can return a successful status even though the title was
  9092.       not changed; reportedly, waiting for two clock ticks after program
  9093.       startup solves this problem
  9094. SeeAlso: AX=168Eh/DX=0000h,AX=168Eh/DX=0003h
  9095. --------W-2F168EDX0002-----------------------
  9096. INT 2F - Windows95 - TITLE - GET APPLICATION TITLE
  9097.     AX = 168Eh
  9098.     DX = 0002h
  9099.     ES:DI -> buffer for ASCIZ application title
  9100.     CX = size of buffer in bytes
  9101. Return: AX = status
  9102.         0000h failed
  9103.         0001h successful
  9104. Desc:    copy as much of the application's window title as possible to the given
  9105.       buffer, appending a terminating NUL to the buffer
  9106. SeeAlso: AX=168Eh/DX=0000h,AX=168Eh/DX=0003h
  9107. --------W-2F168EDX0003-----------------------
  9108. INT 2F - Windows95 - TITLE - GET VIRTUAL MACHINE TITLE
  9109.     AX = 168Eh
  9110.     DX = 0003h
  9111.     ES:DI -> buffer for ASCIZ virtual-machine title
  9112.     CX = size of buffer in bytes
  9113. Return: AX = status
  9114.         0000h failed
  9115.         0001h successful
  9116. Desc:    copy as much of the virtual machine's title as possible to the given
  9117.       buffer, appending a terminating NUL to the buffer
  9118. SeeAlso: AX=168Eh/DX=0001h,AX=168Eh/DX=0002h
  9119. --------W-2F168FDH00-------------------------
  9120. INT 2F - Windows95 - CLOSE-AWARENESS - ENABLE/DISABLE CLOSE COMMAND
  9121.     AX = 168Fh
  9122.     DH = 00h
  9123.     DL = new state
  9124.         00h disabled
  9125.         01h enabled
  9126. Return: AX = status
  9127.         0000h successful
  9128.         else failed
  9129. Desc:    enable or disable the system menu Close command for an application
  9130. SeeAlso: AX=168Fh/DH=01h,AX=168Fh/DH=02h
  9131. --------W-2F168FDH01-------------------------
  9132. INT 2F - Windows95 - CLOSE-AWARENESS - QUERY CLOSE
  9133.     AX = 168Fh
  9134.     DH = 01h
  9135.     DL = 00h (reserved)
  9136. Return: AX = status
  9137.         0000h Close command selected but not yet acknowledged
  9138.         0001h Close command issued and acknowledged
  9139.         168Fh Close command not selected -- application should continue
  9140. Desc:    determine whether the user has requested that the application be closed
  9141.       by selecting the system menu's Close option
  9142. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=02h
  9143. --------W-2F168FDH02-------------------------
  9144. INT 2F - Windows95 - CLOSE-AWARENESS - ACKNOWLEDGE CLOSE
  9145.     AX = 168Fh
  9146.     DH = 02h
  9147.     DL = 00h (reserved)
  9148. Return: AX = status
  9149.         0000h successful
  9150.         else failed
  9151. Note:    once a Close command has been issued, no further keyboard input is
  9152.       available to the application until it calls this function to
  9153.       acknowledge the Close request
  9154. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=03h
  9155. --------W-2F168FDH03-------------------------
  9156. INT 2F - Windows95 - CLOSE-AWARENESS - CANCEL CLOSE
  9157.     AX = 168Fh
  9158.     DH = 03h
  9159.     DL = 00h (reserved)
  9160. Return: AX = status
  9161.         0000h successful
  9162.         else failed
  9163. Desc:    cancels a close request which has already been acknowledged if the
  9164.       application determines that it will not exit at this time
  9165. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=03h
  9166. --------D-2F1690-----------------------------
  9167. INT 2F U - MS-DOS 7 kernel - GET/SET ???
  9168.     AX = 1690h
  9169.     ES:BX -> ???
  9170. Return: ES:BX -> ??? data (see #3318)
  9171. SeeAlso: AX=1611h,AX=1614h
  9172.  
  9173. Format of MS-DOS 7 kernel ??? data:
  9174. Offset    Size    Description    (Table 3318)
  9175.  00h    DWORD    -> ??? data (appears to list the installed drivers)
  9176.  04h    DWORD    -> ??? (value passed in via ES:BX is stored here)
  9177. --------!---Section--------------------------
  9178.